测试React组件 - 确定应该测试功能的位置

时间:2015-07-30 09:27:33

标签: javascript unit-testing backbone.js jasmine reactjs

我对一般的测试非常陌生,不仅仅是React测试,所以我仍然试图找出如何进行测试,但是什么测试。

以下是我提交表单时调用的login回调:

login() {
    let typedUsername = React.findDOMNode(this.refs.username).value;
    if (!typedUsername) {
        return this.setState({
            errored: true
        });
    }
    // we don't actually send the request from here, but set the username on the AuthModel and call the `login` method below
    AuthModel.set('username', typedUsername);
    AuthModel.login();
},

AuthModel是一个Backbone.js模型。但对于这个问题,我们只想说它是我导入Login.jsx组件的外部模块。

我正在编写测试以查看是否输入了用户名,然后调用AuthModel.login()。我是否想在我的test.Login.js测试文件中对其进行测试,是否在我的test.AuthModel.js测试文件中对其进行测试?

it('calls login when there\'s a username present', () => {
    React.findDOMNode(LoginElement.refs.username).value = 'foo';
    TestUtils.Simulate.submit(form);
    // not sure which direction to take this test
});

当前测试(在test.login.js中)for context ...

任何建议都值得赞赏,就像我说的那样,这真的是我做过的第一次测试。

1 个答案:

答案 0 :(得分:0)

听起来你想要一个间谍。这将剔除AuthModel的真实实现,并将其替换为您可以预期的对象:

spyOn(AuthModel, 'login');
// trigger login somehow
expect(AuthModel.login).toHaveBeenCalled();

或者如果您还想测试传递的参数:

expect(AuthModel.login).toHaveBeenCalledWith('username', 's3cretpassw0rd);