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);
添加回答
舉報