下面的说明性代码的一些怪癖的一些背景。 StoreProxy
作为模型存在,由ApplicationRouter创建,具有对商店的引用。这允许其他对象直接访问商店(用于单身人士,测试等)。例如:
MyApp.StoreProxy = DS.Model.extend();
MyApp.ApplicationRoute = U.Route.extend({
model: function () {
return this.store.createRecord('storeProxy');
}
});
在执行路线之前,StoreProxy
没有store
属性。之后,确实如此。我只能假设这是因为一些余烬数据魔法。
我很清楚你对此的反应可能是"唉!没有!你做错了!"。指出。随着时间的推移,我们将从这里开始以正确的方式进行。也就是说,这就是代码现在的位置。那么,鉴于此,并且考虑到这种获取当前商店参考的方法,为什么以下代码不会调用其接受或拒绝处理程序?
我正在为ember写一个qUnit单元测试。我正在使用夹具数据。商店的findAll
电话无法解决或拒绝承诺。
test('Find all in store', function() {
expect(1);
var findPromise;
findPromise = MyApp.StoreProxy.store.findAll('rule');
findPromise.then(function(result) {
console.log('yes');
ok(true);
}, function(error) {
console.log('no');
});
});
我尝试使用此问题中提到的异步测试: testing ember fixture data with quint但是决不会被调用和拒绝,因此测试会无限期地挂起。
我还尝试在我的代码周围放置Ember.run
次调用,以防它是一个奇怪的运行循环事件。但无济于事。
asyncTest('Find all in store', 1, function() {
var findPromise;
Ember.run(function() {
findPromise = MyApp.StoreProxy.store.findAll('rule');
findPromise.then(function(result) {
console.log('yes');
ok(true);
start();
}, function(error) {
console.log('no');
start();
});
});
});
当我正常运行应用程序(或适配器或没有)时,我测试的代码运行正常,所以感觉就像测试环境一样。
有关尝试什么的任何想法?我很难过。
答案 0 :(得分:0)
您编写异步测试的方式不正确。查看QUnit's page on async testing。你的测试应该是这样的:
asyncTest('Find all in store', function() {
var findPromise = ...;
findPromise.then(function(result) {
start();
ok(result);
}, function() {
start();
ok(false);
});
});
具体做法是:
asyncTest
函数中添加了一个额外参数,这可能导致测试根本无法运行。Ember.Application.store
,这不是您应该如何访问您的商店(可能甚至不是有效的商店)。我不确定你的背景是什么,但你应该从其他地方买到你的商店。start()
来电放在之前。