gpt4 book ai didi

ember.js - Ember 对测试路由钩子(Hook)和操作感到困惑

转载 作者:行者123 更新时间:2023-12-03 06:32:27 26 4
gpt4 key购买 nike

我刚刚开始考虑使用 Ember 进行测试,我对如何测试以下内容有点困惑:

1 - 路由 Hook

这是我的一个例子,我不确定是否应该通过单元测试或用户验收测试来完成?我如何触发钩子(Hook),等待 promise 等?

/**
* 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 - Controller /路由操作

在这里,我主要只是选择不同的路线或显示错误消息,这是应该进行单元测试的东西吗?如果是这样怎么办?

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 测试前往不同的路线或错误消息。这将涵盖您的路线的操作和所有模型 Hook 。

如果您想测试路线的操作,单元测试是一个好主意。您可以向您的路线发送一个操作并查看返回的内容。

this example 所示:

//现在使用路由发送方法来测试实际操作
发送('displayAlert',expectedTextBar);

最好将您的代码分成可以单独测试的更小的 block 。正如文档所述:“将代码分成更小的 block (或“关注点”),可以更容易地隔离代码以进行测试,从而使您可以更轻松地捕获错误。”

如果您的路线变得过于复杂且难以测试,则可能表明您需要将某些代码抽象为服务或其他内容。这也将使测试变得更容易。

顺便说一句:我看到您在 afterModel Hook 中返回了一个对象数组。无需使用 RSVP 即可正常工作。

希望有帮助。

关于ember.js - Ember 对测试路由钩子(Hook)和操作感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41875368/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com