Ember Data的商店承诺不会在五次测试中工作

时间:2014-09-16 23:39:23

标签: javascript ember.js ember-data

更新

下面的说明性代码的一些怪癖的一些背景。 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();
     });
   });
 });

当我正常运行应用程序(或适配器或没有)时,我测试的代码运行正常,所以感觉就像测试环境一样。

有关尝试什么的任何想法?我很难过。

1 个答案:

答案 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);
    });
});

具体做法是:

  1. 您在asyncTest函数中添加了一个额外参数,这可能导致测试根本无法运行。
  2. 您正在使用Ember.Application.store,这不是您应该如何访问您的商店(可能甚至不是有效的商店)。我不确定你的背景是什么,但你应该从其他地方买到你的商店。
  3. 您应该在以前的断言之后将start()来电放在之前。