3 回答
TA贡献1817条经验 获得超6个赞
我会用你的模拟任务覆盖真实的任务来扩展你的测试文件中的组件。
class TestContainer extends Container {
@task *myTask(): TaskGenerator<Data> {
return someMockData;
}
}
// ...
hooks.beforeEach(function() {
this.owner.register('component:container', TestContainer);
});
TA贡献1836条经验 获得超13个赞
我不知道有什么方法可以模拟组件中的单个任务进行测试。当涉及网络时,我会伸手去寻找建立在伪装者之上的 ember-cli-mirage。Mirage 在处理 ember-data 模型时非常出色,也可用于处理模拟任何网络请求。如果您不使用 ember-data,您可能只想使用伪装者或调查非框架 Mirage.js。
通过模拟网络并返回预制数据,您将在测试组件时对测试进行相同的控制。我真的很喜欢这种方法,并且发现它多年来一直非常可靠和稳定。
TA贡献1799条经验 获得超8个赞
在我的项目中,我确实有使用 sinon 的任务存根。它的构建方式与你的设置略有不同,但也许你可能会得到一些灵感。
所以我在我的组件中有这个任务
@(task(function* () {
yield this.exportxls.asXls.perform(someArg);
})) downloadXls;
此方法在服务中asXls
@(task(function* (mapping) {
// ...
}).drop()) asXls;
然后在我的集成测试中,我像这样做存根
this.owner.register('service:exportxls', Service.extend({
init() {
this._super(...arguments);
this.set('asXls', {
perform: sinon.stub()
});
}
}));
在那之后,我可以进行常规检查
assert.ok(exportService.asXls.perform.calledOnce);
添加回答
举报