如何在Jasmine中使用React Test Utilities

hip*_*pis 5 backbone.js jasmine reactjs

我用React的test utils制作了单元测试代码.但是遇到了问题

我的环境是:

  • Rails 4
  • Jasmine 2.0.0
  • 主干1.1.2
describe("cNotice", function () {
    it("lol", function () {
        console.log(Notice); // present
        console.log(<Notice message="show me the message" />); // return Constructor

        var instance = <Notice message="show me the message" />;
        var component = React.addons.TestUtils.renderIntoDocument(instance);
        expect(component.getDOMNode().childNodes[0].className).toBe('notice');
    });
});
Run Code Online (Sandbox Code Playgroud)

错误信息是:

错误:不变违规:addComponentAsRefTo(...):只有ReactOwner可以有refs.这通常意味着您尝试将ref添加到没有所有者的组件(即,不是在另一个组件的render方法内创建).尝试在一个新的顶级组件中渲染此组件,该组件将保存ref.


UPDATE

这段代码没问题:

describe("cNotice", function () {
    var Notice = null;
    beforeEach(function () { Notice = React.createClass({...}); });

    it("lol", function () {
        var instance = <Notice message="show me the message" />;
        var component = React.addons.TestUtils.renderIntoDocument(instance);
        expect(component.getDOMNode().childNodes[0].className).toBe('notice');
    });
});
Run Code Online (Sandbox Code Playgroud)

但是我想从外部文件导入Notice组件.

hip*_*pis 2

解决了

我使用了窗口命名空间。
从外部文件导入通知组件

describe("cNotice", function () {
    it("lol", function () {
        var component = React.addons.TestUtils.renderIntoDocument(window.Notice({ message: "show me the message" }));
        expect(component.getDOMNode().childNodes[0].className).toBe('notice');
    });
});
Run Code Online (Sandbox Code Playgroud)