EmberJS: как протестировать действие контроллера с помощью moduleFor из ember-qunit, который использует хранилище ember-data

Я хочу протестировать действие контроллера следующим образом:

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 );

  } );

}

Проблема в том, что если я использую moduleFor из ember-qunit для проверки этого действия, хранилище не определено. Итак, что мне нужно сделать или как правильно создавать такие тесты?


person Dennis Mende    schedule 28.08.2014    source источник


Ответы (1)


Вы можете создать фиктивный магазин. Что-то вроде этого:

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

Это позволит вашему контроллеру работать так, как будто магазин действительно существует, и в то же время предупреждать вас, если контроллер делает что-то с магазином, чего вы не планировали заранее.

Альтернативой может быть настройка вашего магазина для тестирования, но это немного сложнее. Если вы хотите сделать это, может быть проще просто написать интеграционный тест вместо модульного теста.

person GJK    schedule 28.08.2014