[英]Jest - how to mock a method within a function
我有一個ES6類A,需要測試,我唯一想更改的就是一種方法的實現,而其他所有東西則保持不變。
首先,我想手動創建一個類似“ myMock extended A”的模擬類,在該類中我將更改該方法並將其用於測試,但是存在一些問題。
無論如何,還有什么用笑話來指定類中特定方法的替換嗎?
我現在嘗試做的是:
jest.mock("../myclass", () => {
return jest.fn().mockImplementation(() => {
return {
loadPopularItems: jest.fn(() => new Promise((resolve): void =>
resolve()))
};
});
});
現在這給了我myclass不是構造函數的錯誤:
TypeError:myclass`.default不是構造函數
我要做的就是從那里刪除一些異步方法,該方法發出HTTP請求。
您可以在測試中將方法存入原型:
A.prototype.loadPopularItems = jest.fn()
或者,您可以使用jest.spyOn
來輕松重置jest.spyOn
:
jest.spyOn(A.prototype, "loadPopularItems");
jest.restoreAllMocks(); // avoids having to manually track mocks
更好的是,讓您的類接受構成HTTP請求的任何對象/函數作為構造函數參數:
class A {
constructor(http) {
this.http = http;
}
loadPopularItems() {
return this.http.fetchSomething();
}
}
然后在測試中,您可以通過一個偽造的實現:
const fakeHttp = {
fetchSomething: jest.fn()
};
const instance = new A(fakeHttp);
通常,這比結束方法更可取。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.