在测试React组件时,有没有办法直接调用其非生命周期方法?

时间:2016-03-30 14:36:33

标签: javascript unit-testing reactjs react-jsx jestjs

我使用Jest,我有一些组件,如:

var TestClass = react.createClass({
  foo: function() {
    return "test";
  },
  render: function() {
    return <div />;
  }
});

我想专门针对TestClass&#39;编写单元测试。 foo方法。

我看到Call a React component method from outside建议这应该是可行的 - 只需在测试中渲染组件并调用它:

describe("TestClass", function() { 
    it("should access internal methods", function() { 
    var test = <TestClass />

    expect(test.foo()).toBeTruthy()
  }
});

从这个问题的答案我希望这个测试能够通过,而是:

  

test.foo不是函数

我误解了这个答案吗?

一般来说,我希望能够以这种方式测试非生命周期方法 - 它会提供更好的粒度,但如果不可能,那么是否有一个明智的替代方案?

例如,如何测试一个方法作为道具传递给没有这种能力的组件的孩子?

2 个答案:

答案 0 :(得分:0)

使用renderIntoDocument

import ReactTestUtils from 'react-addons-test-utils';

...

const test = ReactTestUtils.renderIntoDocument(
  <TestClass />
);
expect(test.foo()).toBeTruthy();

答案 1 :(得分:0)

如果你使用的是酶而不是ReactTestUtils,并且你正在使用酶的mount渲染器,那么你可以在ReactWrapper上调用.instance()来检索ReactComponent。

var test = mount(
  <TestClass />
);

expect(test.instance().foo()).toBeTruthy();