Używam funkcji do pobierania danych z webapi. Zasadniczo przy użyciu $.ajax
.Jak używać jaśminu do testowania funkcji asynchronicznej, która wymaga długiego czasu reakcji?
Jestem teraz sprawdzając je za pomocą waits()
tak:
describe('xxxxxxxxxxxxxxxxxxxxx', function() {
var r;
it('fetchFilter', function() {
runs(function() {
model.fetch(opts)
.done(function(data) {
r = data;
});
});
waits(2000);
runs(function() {
expect(r[0].gender).toBeDefined();
});
});
});
Problemem jest:
- To nie jest zagwarantowane, że
waits(2000)
będzie wykonać zadanie dobrze. Z różnych powodów (połączenia sieciowe, wydajność algorytmu api to ja, itp.), Mogę potrzebować dowaits(5000)
lub więcej, lub dla niektórych modeli wystarczywaits(500)
. Najbardziej denerwujące jest to, że wszystko wymyka się spod kontroli. - Wiele z
waits()
powoduje, że test-specyfikacje-przebiegi tracą dużo czasu na oczekiwanie. Czas uruchomienia całego zestawu jest zbyt długi, aby go zaakceptować.
Czy jest jakiś best practice
robienia takich rzeczy?
PS: Wiem, że test jednostkowy nie powinien być stosowany do niektórych funkcji opartych na webapi lub bazie danych. Ale pracuję z pojedynczą stroną - js-heavy-webapp. Proces pobierania danych jest tak samo ważny jak to, w jaki sposób będę je wykorzystywać za pomocą modeli js.
Kiedy będzie "Komunikat błędu" pokazać? Limit czasu wyświetla własny komunikat o błędzie. – hbrls
Jeśli nie określisz komunikatu o błędzie, wyświetli się domyślny komunikat o przekroczeniu limitu czasu. Jeśli potrzebujesz niestandardowej wiadomości, możesz użyć 'waitFor (function() {return fetchDone;}," Przekroczono czas oczekiwania na pobranie, itd., Itp. ", 5000);' – istepaniuk
'waitFor' jest niedostępne w jaśminie2. – Gurpreet