Интеграционное тестирование Emberjs с коначой
Возникли проблемы при проведении интеграционного тестирования с Konacha на Ember.js 1.0.rc1. Моя проблема в том, что все тесты выполняются до того, как какие-либо представления будут выполнены Есть ли способ узнать, когда все было отрендерено, без необходимости делать тайм-ауты вручную?
помощник по спецификациям:
//=require sinon
//=require jquery
//=require jquery_ujs
//=require twitter/bootstrap
//=require handlebars
//=require ember
//=require ember-data
//=require_self
//=require icarium
window.lookupController = (name) ->
Icarium.__container__.lookup('controller:' + name)
window.currentPath = ->
lookupController('application').get('currentPath')
Ember.testing = true
Ember.run ->
window.Icarium = Ember.Application.create()
тест:
//=require spec_helper
describe "user login", ->
before (done) ->
Ember.run ->
Icarium.set 'ready', ->
done()
Icarium.initialize()
afterEach ->
Ember.run ->
Icarium.reset()
it "routes to login", ->
Ember.run ->
currentPath().should.eq "login"
it "renders the login form", ->
$('input[type=password]').should.exist
2 ответа
Может быть, установка функции сброса Konacha на noop сделает свое дело:
Konacha.reset = ->
По умолчанию он очищает тело элменет перед каждым тестом. Вы можете найти этот и другие полезные советы на слайдах Джо Лисса: http://www.slideshare.net/jo_liss/testing-ember-apps
У меня есть пример приложения, использующего Konacha, и очень свежую сборку Ember. Я считаю полезным отложить готовность приложения до запуска каждого теста, а затем повысить готовность и дождаться разрешения обещания готовности нового приложения. Вот код из test_helper.js:
//= require konacha_config
//= require sinon
//= require application
// Prevent the router from manipulating the browser's URL.
App.Router.reopen({location: 'none'});
//**** Global before / after ***
// Sinon fake server
var server;
// Stub out Konacha.reset()
Konacha.reset = Ember.K;
beforeEach(function(done) {
// Fake XHR
server = sinon.fakeServer.create();
// Prevent automatic scheduling of runloops. For tests, we
// want to have complete control of runloops.
Ember.testing = true;
Ember.run(function() {
// Advance App readiness, which was deferred when the app
// was created.
//
// This needs to be done here, after each iframe has been setup,
// instead of in a global `before`.
App.advanceReadiness();
// When App readiness promise resolves, setup is complete
App.then(function() {
done();
});
});
});
afterEach(function() {
// Reset App
Ember.run(function() {
App.reset();
});
// Restore XHR
server.restore();
});