Ember对测试路线钩子和动作感到困惑
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ember对测试路线钩子和动作感到困惑相关的知识,希望对你有一定的参考价值。
我刚刚开始考虑使用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');
});
}
}
答案
您可以使用acceptance tests测试去往不同的路线或错误消息。这将涵盖您的路线的动作和所有模型钩子。
如果你想测试路线的动作,单元测试是个好主意。您可以将动作发送到您的路线并查看您的回复。
和this example一样:
// Now use the routes send method to test the actual action
route.send('displayAlert', expectedTextBar);
将代码分解为可以单独测试的较小块是个好主意。正如文档所说:“将代码分成更小的块(或”关注点“),使其更容易被隔离以进行测试,这反过来又可以让您更容易地捕获错误。”
如果您的路线过于复杂且难以测试,则可能表明您需要将某些代码抽象为服务或其他内容。这也将使测试更容易。
作为旁注:我看到你在afterModel
钩子中返回了一系列物体。没有使用RSVP,这将工作得很好。
希望有所帮助。
以上是关于Ember对测试路线钩子和动作感到困惑的主要内容,如果未能解决你的问题,请参考以下文章