1

Ember.js 1.0.rc1 で Konacha との統合テストを行う際に問題が発生しました。私の問題は、ビューがレンダリングされる前にすべてのテストが実行されることです。手動でタイムアウトする必要なく、すべてがいつレンダリングされたかを知る方法はありますか?

仕様ヘルパー:

//=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
4

2 に答える 2

4

Konacha のリセット機能を noop に設定するとうまくいくかもしれません。

Konacha.reset = ->

デフォルトでは、各テストの前にボディ elmenet をクリアします。Jo Liss のスライドで、このヒントやその他の役立つヒントを見つけることができます: http://www.slideshare.net/jo_liss/testing-ember-apps

于 2013-03-28T11:07:27.307 に答える
0

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();
});
于 2013-03-28T11:23:37.700 に答える