我想使用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开发工具中监控网络选项卡时,没有向服务器发出请求:
一位朋友建议我使用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()
)
如何为我的单个模型编写异步测试,并使用Ember CLI中的Ember QUnit框架测试它们与REST API的集成,而无需编写集成测试?
答案 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);
});
});
});