2017-01-26 9 views
2

Я только начинаю смотреть на тестировании с Эмбер и я немного запутался о том, как проверить следующее:Ember спутать на тестирование маршрута крючков и действия

1 - Маршрут перехватывает

Вот пример того, что у меня есть , Я не уверен, что нужно делать с помощью модульного тестирования или приемочного тестирования пользователя? Как запускать крючки, ждать обещаний и т. Д.?

/** 
* Model hook. 
*/ 
model() { 
    return this.modelFor('new'); 
}, 

/** 
* AfterModel hook. 
*/ 
afterModel() { 
    /** 
    * Setup provinces. 
    */ 
    return new Ember.RSVP.Promise((resolve) => { 
     const provinces = Ember.A([ 
      Ember.Object.create({ 
       code: 'AB', 
       description: 'Alberta' 
      }), 
      Ember.Object.create({ 
       code: 'BC', 
       description: 'British Columbia' 
      }), 
      Ember.Object.create({ 
       code: 'MB', 
       description: 'Manitoba' 
      }), 
      Ember.Object.create({ 
       code: 'NB', 
       description: 'New Brunswick' 
      }), 
      Ember.Object.create({ 
       code: 'NL', 
       description: 'Newfoundland and Labrador' 
      }), 
      Ember.Object.create({ 
       code: 'NS', 
       description: 'Nova Scotia' 
      }), 
      Ember.Object.create({ 
       code: 'NT', 
       description: 'Northwest Territories' 
      }), 
      Ember.Object.create({ 
       code: 'NU', 
       description: 'Nunavut' 
      }), 
      Ember.Object.create({ 
       code: 'ON', 
       description: 'Ontario' 
      }), 
      Ember.Object.create({ 
       code: 'PE', 
       description: 'Prince Edward Island' 
      }), 
      Ember.Object.create({ 
       code: 'QC', 
       description: 'Quebec' 
      }), 
      Ember.Object.create({ 
       code: 'SK', 
       description: 'Saskatchewan' 
      }), 
      Ember.Object.create({ 
       code: 'YK', 
       description: 'Yukon' 
      }) 
     ]); 
     resolve(provinces); 
    }).then((provinces) => { 
     this.set('provinces', provinces); 
    }); 
}, 

/** 
* Setup controller hook. 
* @param controller the controller 
* @param model The model 
*/ 
setupController(controller, model) { 
    this._super(controller, model); 
    controller.set('provinces', this.get('provinces')); 
} 

2 - Контроллер/Маршрут Действия

Здесь я в основном просто либо будет другой маршрут или отображаются сообщения об ошибке, это то, что должно быть протестированы? если да, то как?

actions: { 
    /** 
    * Go previous step 
    */ 
    back() { 
     this.transitionToRoute('new.step1'); 
    }, 
    /** 
    * Go to next step. 
    */ 
    next() { 
     this.get('model').save().then(() => { 
      this.transitionToRoute('new.step3'); 
     }).catch(() => { 
      this.get('notificationService') 
       .notifyError('common.error.system_error'); 
     }); 
    } 
} 

ответ

1

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

Если вы хотите проверить действия своего маршрута, модульные тесты - хорошая идея. Вы можете отправить действие на свой маршрут и посмотреть, что вы вернетесь.

Как и в this example:

// Now use the routes send method to test the actual action route.send('displayAlert', expectedTextBar);

Это хорошая идея, чтобы разбить ваш код на более мелкие куски, которые вы можете проверить по отдельности. Как говорится в документации: «разделение кода на более мелкие куски (или« проблемы ») позволяет более легко изолировать его для тестирования, что, в свою очередь, позволяет вам легче ловить ошибки».

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

В качестве примечания: Я вижу, что вы возвращаете массив объектов в свой крючок afterModel. Это будет отлично работать без использования RSVP.

Надеюсь, что это поможет.