0

我以为我可以spyOn在我的模块中使用一个函数,但它没有注册为被调用,即使它显然是。这是一个归结为sample.js

const func1 = () => {
  return func2();
};

const func2 = () => {
  return "func2 called";
};

module.exports = { func1, func2 };

这是它的笑话测试./__tests__/sample.test.js

const sample = require("../sample");

describe("sample", () => {
  it("should spy on func2", () => {
    jest.spyOn(sample,"func2");
    const f = sample.func1();
    console.log(f);                          // outputs "func2 called" correctly
    expect(sample.func2).toHaveBeenCalled(); // fails
  });
});

测试失败:

预期的模拟函数已被调用,但未被调用。

如果我监视它,它可以正常工作,func1但为什么不使用调用的函数func1呢?

4

1 回答 1

0

我想也许你需要对返回值做期望jest.spyOn(sample, "func2");

所以你的测试看起来像:

    const spy = jest.spyOn(sample,"func2");
    const f = sample.func1();
    console.log(f);
    expect(spy).toHaveBeenCalled();

来自 jest 的官方文档:https ://jestjs.io/docs/en/jest-object#jestspyonobject-methodname

于 2019-09-21T08:52:42.083 回答