我發現這個模擬示例漂浮在教程頁面上,但我發現它經常被用作示例令人困惑。
test("mock return value", () => {
const mock = jest.fn();
mock.mockReturnValue("bar");
expect(mock("foo")).toBe("bar");
expect(mock).toHaveBeenCalledWith("foo");
});
是否const mock = jest.fn();曾經連接到需要模擬的真實函式?如果是這樣,它如何知道要模擬哪個函式?mock像這樣的 new 和 random 的用例是什么?
uj5u.com熱心網友回復:
本文中的示例僅演示了jest.fn(). mock要測驗的代碼不使用該物件。
正如它所說,模擬功能提供以下功能:
- 捕獲呼叫
- 設定回傳值
- 更改實施
在真實代碼中有一個場景,函式接受一個物件并在該物件上呼叫一個方法。在這種情況下,您可以創建一個模擬物件并將其傳遞給該函式。
例如
// A real function need to be tested, it can be imported from a module
function getUserById(dbc, id) {
return dbc.query('select * from users where id = $1;', [id]);
}
describe('70538368', () => {
test('should pass', () => {
const mDbc = {
query: jest.fn().mockReturnValue({ name: 'teresa teng' }),
};
const actual = getUserById(mDbc, '1');
expect(actual).toEqual({ name: 'teresa teng' });
expect(mDbc.query).toBeCalledWith('select * from users where id = $1;', ['1']);
});
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/400205.html
上一篇:Rails7Ruby3.1LoadError:無法加載此類檔案--net/smtp
下一篇:如何計算員工人數
