【问题标题】:Mock function call inside other function在其他函数内模拟函数调用
【发布时间】:2022-02-12 03:21:46
【问题描述】:

如何在 JavaScript 中模拟另一个函数内部的函数调用?

代码示例:

returnNumber.js

export default function returnNumber() {
  return 5;
}

myFunction.js

import returnNumber from "./returnNumber";

export default function myFunction(input) {
  return input + returnNumber();
}

我想通过做这样的事情来测试它,但如果我看到的代码示例似乎在我的情况下工作,则没有

myFunction.test.js

import myFunction from "./myFunction";

test("myFunction should equal 6", async () => {
  returnNumber = () => {
    return 1
  }

  expect(myFunction(5)).toEqual(6);
});

考虑上面的例子;我可以在不更改returnNumber.js / myFunction.js 的代码的情况下测试myFunction,同时覆盖returnNumber 的返回值吗?

【问题讨论】:

    标签: javascript unit-testing testing jestjs


    【解决方案1】:

    我认为您通常使用 jest 来模拟函数的返回值,如下所示:

    import myFunctionService from './myFunctionService';
    
    test('myFunction', async () => {
    jest.spyOn(myFunctionService, 'returnNumber').mockReturnValue(1);
    const result = myFunction(5);
    
    expect(result).toBe(6);
    }
    

    类应该是这样的:

    export default class myFunctionService {
        constructor() {}
        
        myFunction(input) {
          return input + returnNumber();
        }
    }
    

    【讨论】:

    • 感谢您的回答,我已经用 Jest 尝试了很多东西,但从未设法让嘲笑的东西发挥作用。不幸的是,您的答案返回“无法监视未定义的属性,因为它不是函数”。
    • 您在开玩笑测试中导入函数了吗?
    • 一旦你导入它,你应该可以用 jest 来模拟返回值。也许它有助于编写一个包含 returnNumber 函数的类,然后像这样在测试中 spyOn 类,让我编辑答案
    猜你喜欢
    • 2013-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-09
    • 2018-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多