あなたは絶対に正しいと思います。 LoginContainer
コンポーネントは、ユーザーがログインボタンをクリックしたときに、実行したい機能を提供する必要があります。私の例を参照してください。
LoginContainer
import { connect } from 'react-redux'
import Login from '../components/login'
import { initiateLoginRequest } from '../actions/login'
const LoginContainer = connect(null, { initiateLoginRequest })(Login)
export default LoginContainer
注:を私が代わりに機能のconnect()
の2番目のパラメータとしてオブジェクトを提供しています。あなたはこれについてreduxのドキュメントで読むことができます。
だから今、私のログイン・コンポーネントは、アクションをディスパッチする機能に渡されたものを利用することができます:
<Button
raised
primary
label="Login"
onClick={this.props.initiateLoginRequest()}
/>
このボタンは、私のコンポーネントrender()
方法のどこかに住んでいます。
このようなプレゼンテーションコンポーネントをテストする場合は、Enzymeをご覧ください。酵素は、あなたがこのようなテストを書くことができますリアクトのためのJavaScriptのテストユーティリティです:
import expect from 'expect'
import React from 'react'
import { shallow } from 'enzyme'
import { Button } from 'react-toolbox/lib/button'
import Login from '../../src/components/login'
function setup() {
const props = {
initiateLoginRequest: expect.createSpy()
}
const wrapper = shallow(<Login {...props} />)
return {
props,
wrapper
}
}
describe('components',() => {
describe('Login',() => {
describe('Login Button',() => {
it('should dispatch the proper action ',() => {
const { wrapper, props } = setup()
expect(props.initiateLoginRequest.calls.length).toBe(0)
wrapper.find(Button).at(1).simulate('click')
expect(props.initiateLoginRequest.calls.length).toBe(1)
})
})
})
})
基本的にあなたは、スパイを作成し、その小道具を経由してコンポーネントにそれを渡し、その後、クリックイベントをシミュレートします。次に、メソッドが実際に呼び出されたことをテストでチェックインできます。