Chcę potwierdzić, że wartość jest ułamkiem dziesiętnym (lub 0), więc liczba powinna być większa lub równa zero i mniejsza niż 1.
describe('percent',function(){
it('should be a decimal', function() {
var percent = insights.percent;
expect(percent).toBeGreaterThan(0);
expect(percent).toBeLessThan(1);
});
});
Jak naśladować „> = 0”?
javascript
tdd
jasmine
Bryce Johnson
źródło
źródło
expect(percent).not.toBeLessThan(0);
Odpowiedzi:
Pomyślałem, że powinienem to zaktualizować, ponieważ API zmieniło się w nowszych wersjach Jasmine. Jasmine API ma teraz wbudowane funkcje dla:
Tych funkcji należy używać zamiast poniższych porad.
Kliknij tutaj, aby uzyskać więcej informacji na temat interfejsu API dopasowań Jasmine
Wiem, że to stare i rozwiązane pytanie, ale zauważyłem, że brakowało dość zgrabnego rozwiązania. Ponieważ większe lub równe jest odwrotnością funkcji mniejsze niż, spróbuj:expect(percent).not.toBeLessThan(0);
W tym podejściu wartość procentu może zostać zwrócona przez funkcję asynchroniczną i przetworzona jako część przepływu sterowania.źródło
expect(2 + 2).not.toBe(5)
,expect(2 + 2).toBeGreaterThan(0)
,expect(2 + 2).toBeLessThan(5)
expect(NaN).not.toBeLessThan(0);
przechodzi zamiast zawodzić. (not.toBeLessThan
jest tylko odwrotnością, jeślipercent
Musisz tylko najpierw uruchomić operację porównania, a następnie sprawdzić, czy jest to prawda.
describe('percent',function(){ it('should be a decimal',function(){ var percent = insights.percent; expect(percent >= 0).toBeTruthy(); expect(percent).toBeLessThan(1); }); });
źródło
since('expected percent to be greater than or equal to zero').expect(percent >= 0).toBeTruthy();
>=
, wolę niestandardowy dopasowujący, ponieważ utrzymuje testy niezakłócone (dość łatwe, zobacz moją odpowiedź poniżej), ale w przypadku porównań, które pojawiają się rzadziej lub nie są wystarczająco wyraziste, ta wtyczka wydaje się być dokładnie tym właściwa rzecz. Dzięki!expect(percent).toBeGreaterThan(-1);
xD, nie próbowałem tegoObecna wersja Jasmine obsługuje toBeGreaterThan i toBeLessThan.
expect(myVariable).toBeGreaterThan(0);
źródło
Jestem spóźniony, ale publikuję to na wypadek, gdyby ktoś nadal odwiedzał to pytanie w poszukiwaniu odpowiedzi, używam wersji Jasmine 3.0 i jak wspomniał @Patrizio Rullo, możesz użyć toBeGreaterThanOrEqual / toBeLessThanOrEqual .
Został dodany w wersji 2.5 zgodnie z informacjami o wydaniu - https://github.com/jasmine/jasmine/blob/master/release_notes/2.5.0.md
Np
expect(percent).toBeGreaterThanOrEqual(1,"This is optional expect failure message");
lub
expect(percent).toBeGreaterThanOrEqual(1);
źródło
Nieco dziwne to nie jest podstawowa funkcjonalność
Możesz dodać niestandardowy element dopasowujący w następujący sposób:
JasmineExtensions.js
yourGlobal.addExtraMatchers = function () { var addMatcher = function (name, func) { func.name = name; jasmine.matchers[name] = func; }; addMatcher("toBeGreaterThanOrEqualTo", function () { return { compare: function (actual, expected) { return { pass: actual >= expected }; } }; } ); };
W efekcie definiujesz konstruktora dla swojego dopasowania - jest to funkcja, która zwraca obiekt dopasowujący.
Uwzględnij to przed „uruchomieniem”. Podstawowe dopasowania są ładowane podczas uruchamiania.
Twój plik html powinien wyglądać następująco:
<!-- jasmine test framework--> <script type="text/javascript" src="lib/jasmine-2.0.0/jasmine.js"></script> <script type="text/javascript" src="lib/jasmine-2.0.0/jasmine-html.js"></script> <!-- custom matchers --> <script type="text/javascript" src="Tests/JasmineExtensions.js"></script> <!-- initialisation--> <script type="text/javascript" src="lib/jasmine-2.0.0/boot.js"></script>
Następnie w pliku boot.js dodaj wywołanie, aby dodać elementy dopasowujące po zdefiniowaniu jasmine, ale przed jasmine.getEnv (). Get env jest w rzeczywistości wywołaniem konfiguracyjnym (o nieco mylącej nazwie).
Dopasowania otrzymują konfigurację w wywołaniu setupCoreMatchers w konstruktorze Env.
/** * ## Require & Instantiate * * Require Jasmine's core files. Specifically, this requires and attaches all of Jasmine's code to the `jasmine` reference. */ window.jasmine = jasmineRequire.core(jasmineRequire); yourGlobal.addExtraMatchers(); /** * Since this is being run in a browser and the results should populate to an HTML page, require the HTML-specific Jasmine code, injecting the same reference. */ jasmineRequire.html(jasmine); /** * Create the Jasmine environment. This is used to run all specs in a project. */ var env = jasmine.getEnv();
Pokazują inny sposób dodawania niestandardowych dopasowań w przykładowych testach, jednak sposób, w jaki to działa, polega na odtworzeniu dopasowania (ów) przed każdym pojedynczym testem przy użyciu pliku
beforeEach
. Wydaje się to dość okropne, więc pomyślałem, że zamiast tego wybiorę takie podejście.źródło
Dziś napotkałem ten sam problem i jak się okazuje, nie jest trudno dodać do niego niestandardowy element dopasowujący. Główną zaletą dopasowywania niestandardowego jest to, że może zwracać znaczące komunikaty, gdy test się nie powiedzie.
Oto kod dla dwóch dopasowań
.toBeAtLeast()
i.toBeAtMost()
na wypadek, gdyby to komuś pomogło.beforeEach( function () { // When beforeEach is called outside of a `describe` scope, the matchers are // available globally. See http://stackoverflow.com/a/11942151/508355 jasmine.addMatchers( { toBeAtLeast: function () { return { compare: function ( actual, expected ) { var result = {}; result.pass = actual >= expected; if ( result.pass ) { result.message = "Expected " + actual + " to be less than " + expected; } else { result.message = "Expected " + actual + " to be at least " + expected; } return result; } }; }, toBeAtMost: function () { return { compare: function ( actual, expected ) { var result = {}; result.pass = actual <= expected; if ( result.pass ) { result.message = "Expected " + actual + " to be greater than " + expected; } else { result.message = "Expected " + actual + " to be at most " + expected; } return result; } }; } } ); } );
źródło
Został właśnie włączony do głównej gałęzi Jasmine GitHub w mojej łatce, aby dodać potrzebne elementy dopasowujące:
Add toBeGreatThanOrEqual i toBeLessThanOrEqual dopasowujące
Ale nie mam pojęcia, w której wersji to będzie. W międzyczasie możesz spróbować użyć kodu mojego commita w swojej lokalnej kopii Jasmine.
źródło
Polecam użycie tej wtyczki Jasmine: https://github.com/JamieMason/Jasmine-Matchers
źródło
Możesz użyć funkcji,
least
aby sprawdzić, czy wartość jest większa lub równa innej wartości.Alias
least
jestgte
(wielki lub równy). I odwrotnie, możesz użyćlte
(mniejsze lub równe), aby sprawdzić odwrotnie.Aby więc odpowiedzieć na pytanie, możesz zrobić:
expect(percent).to.be.gte(0)
źródło
TypeError: Cannot read property 'be' of undefined
zaexpect(1).to.be.gte(-1);