尝试使用 jasmine-react 测试 React 组件

Attempting to test a React component with jasmine-react

这个问题与one of the solutions to this question非常相似。

我用这个作为我的例子,因为它与我的实际问题相似但很好地提炼了。

以下测试产生此结果:

Warning: Comp.type is deprecated. Use Comp directly to access the class.

 Error: Expected a spy, but got undefined.

测试:

it("should call plop method on render", function(){

      var Comp = React.createClass({

        displayName: "Comp",

        plop: function() {
          console.log("plop");
        },

        render: function() {
          this.plop();
          return (<div></div>);
        }
      });


      //spy on method
      jasmineReact.spyOnClass(Comp, "plop");
      jasmineReact.render(<Comp />);
      expect(Comp.plop).toHaveBeenCalled();
    })

知道我做错了什么吗?

JasmineReact 的方法期望语法与您使用它的方式不同。试试这个:

expect(jasmineReact.classPrototype(Comp).plop).toHaveBeenCalled();

此外,如果您 运行 对状态之类的东西有期望,则需要使用 render returns 的实例,而不是 class:

var comp = jasmineReact.render(<Comp />);

expect(comp.state.something).toBe('else');