簡體   English   中英

開玩笑-如何在函數中模擬方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM