Интеграционное тестирование 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();
});
Другие вопросы по тегам