尝试使用 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');
这个问题与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');