我想使用 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 开发工具中监控“网络”选项卡时,不会向服务器发出任何请求:
一位 friend 建议我使用 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 的集成,而无需编写集成测试?
最佳答案
我不确定状态来自哪里,保存的 promise 返回记录,而不是服务器的响应。
为了使用开始,必须先使用停止。
停止(); 一些AsyncCall(函数(){ 开始(); });
并且存储仅注入(inject)到路由和 Controller 中,并且不在您的测试范围内。您需要使用容器来获取商店。
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);
});
});
});
关于unit-testing - Ember CLI : How to do Asynchronous Model Unit Testing with RESTAdapter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26317855/