如何模拟我的React组件中使用的依赖关系?

时间:2018-07-11 21:32:45

标签: reactjs unit-testing jestjs enzyme

我有点类似以下情况:

import { someFunction } from "./utils/function"

class ExampleComponent extends React.Component {

  buildPages = () => {
    return someFunction();
  }

  render() {
    const pages = this.buildPages();

    return <div className="container">{pages}</div>;
  }
}

我的代码比上面的代码复杂得多,但是上面的内容可以归结为

我进行了以下测试:

describe("ExampleComponent", () => {
  it("should match snapshot", () => {
    // Somehow mock someFunction being used in the component.

    expect(mount(getExampleComponent())).toMatchSnapshot();
  };
});

someFunction是昂贵的计算,我基本上希望在测试时仅将其用作jest.fn().mockReturnValue(true)。有没有办法做到这一点?我读了一些关于开玩笑的嘲笑,但似乎没有一个能解决这个用例。我对传递someFunction作为道具不感兴趣。

1 个答案:

答案 0 :(得分:0)

结果很简单:

import * as Functions from "./utils/function";

describe("ExampleComponent", () => {
  it("should match snapshot", () => {
    jest.spyOn(Functions, "someFunction").mockImplementation(() => {
      return true
    })

    expect(mount(getExampleComponent())).toMatchSnapshot();
  };
});

import * as Functions from "./utils/function";在样式上非常重要,因为jest.spyOn带有两个参数,您需要将要监视的函数用作第二个参数字符串。