2

我不明白如何使用 Ember.Test 包提供的等待助手来构建我们自己的助手。我理解的少数是我们必须在我们的助手结束时系统地返回“等待(...)”。但是如何报告我的异步操作已完成?我们可以将参数传递给等待方法,所以我认为我可以传递一个承诺,并在我的异步操作完成时解决承诺......但它不起作用:D

为了说明我的想法,我用一个例子做了一个 JSBIN:http: //jsbin.com/OxeniTO/30/

App = Em.Application.create({
  rootElement:"#ember-app"
});

App.setupForTesting();
App.injectTestHelpers();
App.advanceReadiness();


test('Wait 1000ms and fail',function(){
  visit('/').then(function(){
    var promise = $.Deferred();

    setTimeout(function(){
      ok(false, "Assertion failed");
      promise.resolve();
    }, 1000);

    ok(true, "Assert passed");

    return wait(promise);
  });
});

在这种情况下,Qunit 的 Ember.Test.Adapter 不会等待承诺解决。

4

1 回答 1

3

尝试包装您的解决承诺,Ember.run.later而不是使用setTimeout

...
Ember.run.later(function(){
  ok(false, "Assertion failed");
  promise.resolve();
}, 1000);
...

演示

希望能帮助到你。

于 2013-08-26T22:25:18.513 回答