Jestem bardzo nowa w Jasmine i natknąłem się na sytuację, w której oczekiwałbym albo String, albo zerowego. Podjęłam próbę zrobienia lub w obrębie ToEqual, ale widzę dziwne wyniki, które prowadzą mnie do przekonania, że robię to niewłaściwie. Jaki jest najlepszy sposób, aby poradzić sobie z taką sytuacją?Czy można sprawdzić wiele typów w obrębie elementu toEqual w Jasmine.Js?
Być może właśnie sprawdzam, czy moje testy są złe. Czy powinienem po prostu zepsuć ten pomysł posiadania jednego testu do przetestowania obu sytuacji?
describe("Jasmine", function() {
//1
it("should be able to handle any(String) || null within toEqual for string", function() {
expect("aString").toEqual(jasmine.any(String) || null);
});
//2
it("should be able to handle any(String) || null within toEqual for null", function() {
expect(null).toEqual(jasmine.any(String) || null);
});
//3
it("should be able to handle null || any(String) within toEqual for string", function() {
expect("aString").toEqual(null || jasmine.any(String));
});
//4
it("should be able to handle null || any(String) within toEqual for null", function() {
expect(null).toEqual(null || jasmine.any(String));
});
});
- Przełęcz
Expected null to equal <jasmine.any(function String() { [native code] })>.
- Przełęcz
Expected null to equal <jasmine.any(function String() { [native code] })>.
Zdaję sobie sprawę, istnieje również toBeNull(), która jest prawdopodobnie dlaczego wyniki są tak słaby, ale bez "lub" łańcuchowanie nie wiedziałem, jak to włączyć.
(Running Jasmine 1.3.1 wersji 1354556913)
rozwiązany! Pełne rozwiązanie poniżej, jeśli ktoś jest zainteresowany
describe("Jasmine", function() {
beforeEach(function() {
this.addMatchers({
toBeStringOrNull: function() {
var actual = this.actual;
this.message = function() {
return "Expected " + actual + " to be either string or null";
};
return typeof actual === 'string' || actual instanceof String || actual === null;
}
});
});
//1
it("should be able to handle any(String) || null within toEqual for string", function() {
expect("aString").toBeStringOrNull();
});
//2
it("should be able to handle any(String) || null within toEqual for null", function() {
expect(null).toBeStringOrNull();
});
//3
it("should be able to handle null || any(String) within toEqual for string", function() {
expect("aString").toBeStringOrNull();
});
//4
it("should be able to handle null || any(String) within toEqual for null", function() {
expect(null).toBeStringOrNull();
});
});
można oczekiwać jedno wejście dać zarówno 'string' lub' null'? Nie rozumiem, dlaczego pojedyncze "oczekiwanie" wymagałoby objęcia obu przypadków. – Mathletics
@Mathletics Spodziewałbym się albo, dlatego uderzam w tę ścianę. Próbowałem utworzyć test, aby podczas testów integracyjnych móc go ponownie użyć w obu przypadkach. Myślę, że zdaję sobie sprawę, że nie jest to standardowy sposób, aby to osiągnąć. – JackMorrissey
Czy można pokazać przykład metody, która z jednego wejścia może potencjalnie zwrócić oba? – Mathletics