异步时使用Ember Mocha测试失败(使用ember-mocha-adapter)

时间:2014-02-07 14:18:38

标签: javascript testing ember.js mocha

我无法让mocha与Ember合作,因为当执行以下性质的测试时它失败了:

describe('Location Panel', function () {
  beforeEach(function () {
    App.reset();
    visit('/map/41.76721,-72.66907');
  });

  it('Have proper address', function () {
    var $title = find('.panel-header h2');
    expect($title).to.have.text('476 Columbus Blvd, Hartford');
  });
});

基本上它找不到任何DOM元素,因为它在路由加载完成之前运行测试..如果我在测试中visit,则会发生同样的情况,并使用andThen等等。

这是一个用于调试的jsbin

修改

在jsbin中,我正在使用模拟的ajax调用,但在我的测试中,ajax调用是真实的。我使用的Ember.$.ajax包含在以下内容中:

function ajax (url, options) {
  return new Ember.RSVP.Promise(function (resolve, reject) {
    options = options || {};
    options.url = url;

    options.success = function (data) {
      Ember.run(null, resolve, data);
    };

    options.error = function (jqxhr, status, something) {
      Ember.run(null, reject, arguments);
    };

    Ember.$.ajax(options);
  });
}

我是否也应该使用Ember.run.later

1 个答案:

答案 0 :(得分:3)

您应该使用Ember.run.later而不是setTimeout,以便wait帮助者知道它应该等待。

或者您可以使用Ember.test.registerWaiter,但我认为您不需要它。

更新了JSBIN:http://emberjs.jsbin.com/gahe/1/edit