Ember CLI:如何使用RESTAdapter进行异步模型单元测试

时间:2014-10-11 18:29:52

标签: unit-testing asynchronous ember.js ember-data ember-cli

我想使用Ember CLI附带的Ember测试框架测试我的模型及其与REST API的集成,但是在我的模型测试中,我的测试中没有使用我的RESTAdapter设置进行请求。就目前而言,模型上对save()的任何调用都将导致其后的所有测试都不执行:

这是我为检查与服务器的交互(REST API)而进行的测试:

test "store can be used to send data to server", ->
    store = @store()
    Ember.run ->
        cpanel = store.createRecord "item"
        cpanel.save().then((response) =>
            equal(response.status, 200)
        )

这完全阻止了这个之后的所有测试;此外,在Chrome开发工具中监控网络选项卡时,没有向服务器发出请求:

following tests fail

一位朋友建议我使用QUnit Async Helper,但在使用时,我发现this.store()undefined(也许Ember QUnit适配器决定不支持异步测试助手?) :

asyncTest "Async creates account on server", ->
    expect(2)
    store = @store()
    Ember.run =>
        account = store.createRecord("account", {
            siteName: "sample account"
            url: "http://url.com"
        })
        account.save().then((response) =>
            equal(response.status, 200)
            ok account
            start()
        )

async testing fails in model test in ember cli

如何为我的单个模型编写异步测试,并使用Ember CLI中的Ember QUnit框架测试它们与REST API的集成,而无需编写集成测试?

1 个答案:

答案 0 :(得分:2)

我不确定状态来自哪里,保存的承诺会返回记录,而不是来自服务器的响应。

要使用start,必须先使用stop。

停止();    someAsyncCall(函数(){      开始();    });

商店只注入路线和控制器,不在你的测试范围内。您需要使用容器来获取商店。

store = App.__container__.lookup('store:main');

它看起来像这样:

test("save a record", function(){
  var record,
      store = App.__container__.lookup('store:main');
  stop();
  Em.run(function(){
    record = store.createRecord('color', {color:'green'});
    record.save().then(function(){
      start();
      equal(record.get('id'), 1);
    });
  });
});

示例:http://emberjs.jsbin.com/wipo/49/edit