6

Próbuję napisać prosty test integracji Ember i nadal otrzymuję frustrujący błąd pętli uruchamiania pomimo użycia Ember.run. Miałem kiedyś koszmar, próbując zmusić go do pracy, gdyby ktoś mógł mi pomóc, byłbym bardzo wdzięczny. W szczególności widzę znak testowy i zaczynam ładować następną stronę (tak jak powinna), ale zaraz po zakończeniu testu otrzymuję ten błąd. Dotyczy to drugiego testu, pierwszego podania (ponieważ nic nie jest tak asynchroniczne, jak sądzę).Testowanie embers: Włączyłeś tryb testowy, który wyłączył automatyczne uruchamianie pętli.

import Ember from 'ember'; 
import startApp from 'jobs-tuftsdaily/tests/helpers/start-app'; 
import exists from 'jobs-tuftsdaily/tests/helpers/start-app'; 

var App; 

module('Integration - Landing Page', { 
    setup: function() { 
     App = startApp(); 
    }, 
    teardown: function() { 
     Ember.run(App, 'destroy'); 
    } 
}); 

test('Should load content', function() { 
    visit('/').then(function() { 
    ok(exists("*"), "Found HTML!"); 
    ok(exists('label:eq(4)'), "Slug label on page"); 
    }); 
}); 

test('Should sign in test user', function() { 
    Ember.run(function() { 
    visit('/').andThen(function() { 
     return fillIn("input[name=email]", "[email protected]"); 
    }).andThen(function() { 
     return fillIn("input[type=password]", "password"); 
    }).andThen(function() { 
     return click("button"); 
    }).andThen(function() { 
     ok(1, "stupid test passed"); 
    }); 
    }); 
}); 
+0

Jak wygląda kod produkcyjny (w trakcie testu) dla tej aplikacji? Domyślam się, że jakiś kod asynchroniczny rzuca to, ale trudno powiedzieć więcej szczegółów. –

+0

Otrzymuję ten sam problem, ale tylko w firefoxie, a nie w chrome. nie przetestowałeś fantomu ani safari czy np. – stevethecollier

+1

czy znalazłeś rozwiązanie? Mam ten sam problem .. –

Odpowiedz

1

owijające twoje testy w Ember.run nie pomoże, ponieważ błąd otrzymujesz nie dzieje, ponieważ kod testu ale kod aplikacji. Podczas logowania musisz wykonać kilka asynchronicznych żądań (na przykład AJAX lub setTimeout), a także w ich programach obsługi wykonać niektóre wykonania Ember API (jak ustawienie, przenoszenie, cokolwiek).

Jeśli potrzebujesz dokładnej pomocy, musisz opublikować swój kod na trasie/kontrolerze.

Niedawno opublikowałem ebook o Run Loop, łącznie z mechanizmem autorun, który może być downloaded here.

3

Zdaję sobie sprawę, jestem późno do partii, ale tu idzie i tak:

gdzieś w części lub kodu aplikacji (to znaczy nie w kodzie testowym), prawdopodobnie słuchać jakiegoś zdarzenia poza Ember (np. zdarzenie DOM, poprzez jQuery, lub coś w tym stylu), ale staraj się wchodzić w interakcje z nim podczas biegu tego handler'a. Te funkcje obsługi muszą być zapakowane w Ember.run.bind(), lub nie będą miały przebiegłości podczas testu. Ember.run.bind() ustawi też dla ciebie this podczas obsługi.

Jeśli nie owinąć zwrotnych zdarzeń w Ember.run.bind(), kod będzie prawdopodobnie nadal działać bez kłopotów podczas normalnego przebiegu aplikacji, ponieważ funkcja autorun znajdzie runloop wymagających (na przykład, jeśli coś zaplanować korzystając Ember.run.schedule() podczas obsługi) interakcje z Emberem w kodzie i uruchomienie dla nich pętli, ale jest wyłączone w testach.

1

Mam ten sam problem w teście integracji komponentu. Błąd:

Brak potwierdzenia: Włączyłeś tryb testowy, który wyłączył automatyczne uruchamianie pętli uruchamianych .

Podczas pracy należy zawinąć dowolny kod z asynchronicznymi efektami ubocznymi.

I znalazłem przyczynę problemu dla testów integracyjnych. Mam renderowania komponentu z następującego kodu:

let myobject = Ember.Object.create({x:1}); 
this.set('param', myobject) 
this.render(hbs`{{my-object param=param}}`); 

Po renderingu, aktualizowanie myobject jak poniżej jest przyczyną błędu .:

myobject.set('x',2); 

Bo to nie jest wewnątrz żaru wykonywania pętli.

Zamiast tego erronous powołania, aktualizacja wartości powinno być wykonane jako jedno z poniższych:

this.set('param.x',2); 
//OR: 
this.set('param', Ember.Object.create({x:1}); 
//OR: 
Ember.run(()=>{ 
    Ember.set(myobject,'x',2); 
}); 

Twoim przypadku: Nie próbowałem, ale moim zdaniem jest to, że pomocnicy testy asynchronicznych, takich jak wizyta , kliknij, wypełnij może być używany w testach akceptacyjnych nie w testach integracyjnych z następującego powodu.

+1

'myobject.set ('x', 2);' vs. 'this.set ('param.x', 2);' pomógł mi, dzięki! –

Powiązane problemy