EmberJS:如何使用ember-qunit的moduleFor测试控制器动作,它使用ember-data存储

时间:2014-08-28 11:27:36

标签: ember.js ember-data ember-qunit

我想测试这样的控制器动作:

createNewBase: function () {

  var attributesForNewBase = this.get( 'model' ).getProperties( ... ),
      self = this,
      newBase = this.store.createRecord( ..., {

        ...

      } );

  newBase.save().then( function ( createdBase ) {

    self.send( 'setBaseOfModel', createdBase );

  }, function ( error ) {

    console.log( error );

  } );

}

问题是如果我使用ember-qunit的moduleFor来测试这个动作,那么商店是未定义的。那么我该怎么做或者创建这样的测试的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

您可以创建模拟商店。像这样:

controller.set('store', {
    createRecord: function() {
        return {
            save: function() {
                return Ember.RSVP.resolve();
            }
        };
    }
});

这将使您的控制器能够像商店真的一样运行,同时,提醒您控制器是否对您未提前计划的商店做任何事情。

另一种方法是实际设置您的商店进行测试,但这种情况稍微复杂一些。如果你想这样做,那么编写集成测试而不是单元测试可能会更容易。