写作时如何处理 TDD React/Redux
How to approach TDD when writing React/Redux
我正在使用 TDD 编写 React/Redux 应用程序。问题是如何处理编写新应用程序的第一步,考虑到我想使用的所有样板文件。
根据 TDD,我应该只编写最少的代码才能通过我的测试,然后再进行重构。例如,我是否应该从没有 Redux 开始,然后重构并引入 Redux?考虑到 Redux 的样板文件(stores/reducers/wrapper 元素等)
,我将进行相当大的重构
我了解 TDD 方法的巨大优势。问题是,在那些情况下,是否有更好的方法是 "allowed" 使用比最小代码集更多的代码来通过测试..
我的首选方法是先测试 React,然后检查组件是否根据提供给它的 props 正确呈现。
像这样:
import {App} from '../../src/containers/App';
import React from 'react';
import ReactDOM from 'react-dom';
import {
renderIntoDocument,
scryRenderedDOMComponentsWithTag
} from 'react-addons-test-utils';
import {expect} from 'chai';
describe('Main page',() => {
it('should show a sign-in page if isAuthenticated is false',() => {
const component = renderIntoDocument(
<App isAuthenticated={false}/>
);
const buttons = scryRenderedDOMComponentsWithTag(component,'button')
expect(buttons.length).to.be.equal(1)
});
it('should show a welcome text if isAuthenticated is true',() => {
const component = renderIntoDocument(
<App isAuthenticated={true}/>
);
const text = scryRenderedDOMComponentsWithTag(component,'h1')
expect(text).to.have.string('welcome')
})
})
然后我会为 redux 添加测试,以检查状态是否根据提供给 reducer 的输入而改变。
最终还是看个人喜好了。
Redux 不会影响您编写最少的代码来通过每个单独测试的能力。
您的各个 React 组件只是使用 props 和 doing/displaying 东西。您对这些组件的单元测试不应该关心这些 props 是以标准 React 方式传递的,还是通过 react-redux 插入的。所以 Redux 的存在不会影响你用最少的代码通过 React 组件测试的能力。
有一些小的例外,例如将组件状态移动到 Redux 状态,或更改处理副作用的方式(例如从 API 获取数据)。这些类型的更改可能需要对您的测试进行一些更改,但如果有的话,它们可能会使它们更简单。
当然,如果你添加 Redux,你将不得不为新的 Redux reducers/action creators/selectors 等编写测试,但是编写这些测试非常简单。您不会重复任何工作:无论您是否开始使用 Redux,您编写测试所花费的时间都将大致相同。
关于使用或不使用 Redux 的一般概念:创建 Redux 的 Dan Abramov 建议从普通 React 开始,然后仅在发现需要时才添加 Redux。
我正在使用 TDD 编写 React/Redux 应用程序。问题是如何处理编写新应用程序的第一步,考虑到我想使用的所有样板文件。
根据 TDD,我应该只编写最少的代码才能通过我的测试,然后再进行重构。例如,我是否应该从没有 Redux 开始,然后重构并引入 Redux?考虑到 Redux 的样板文件(stores/reducers/wrapper 元素等)
,我将进行相当大的重构我了解 TDD 方法的巨大优势。问题是,在那些情况下,是否有更好的方法是 "allowed" 使用比最小代码集更多的代码来通过测试..
我的首选方法是先测试 React,然后检查组件是否根据提供给它的 props 正确呈现。
像这样:
import {App} from '../../src/containers/App';
import React from 'react';
import ReactDOM from 'react-dom';
import {
renderIntoDocument,
scryRenderedDOMComponentsWithTag
} from 'react-addons-test-utils';
import {expect} from 'chai';
describe('Main page',() => {
it('should show a sign-in page if isAuthenticated is false',() => {
const component = renderIntoDocument(
<App isAuthenticated={false}/>
);
const buttons = scryRenderedDOMComponentsWithTag(component,'button')
expect(buttons.length).to.be.equal(1)
});
it('should show a welcome text if isAuthenticated is true',() => {
const component = renderIntoDocument(
<App isAuthenticated={true}/>
);
const text = scryRenderedDOMComponentsWithTag(component,'h1')
expect(text).to.have.string('welcome')
})
})
然后我会为 redux 添加测试,以检查状态是否根据提供给 reducer 的输入而改变。
最终还是看个人喜好了。
Redux 不会影响您编写最少的代码来通过每个单独测试的能力。
您的各个 React 组件只是使用 props 和 doing/displaying 东西。您对这些组件的单元测试不应该关心这些 props 是以标准 React 方式传递的,还是通过 react-redux 插入的。所以 Redux 的存在不会影响你用最少的代码通过 React 组件测试的能力。
有一些小的例外,例如将组件状态移动到 Redux 状态,或更改处理副作用的方式(例如从 API 获取数据)。这些类型的更改可能需要对您的测试进行一些更改,但如果有的话,它们可能会使它们更简单。
当然,如果你添加 Redux,你将不得不为新的 Redux reducers/action creators/selectors 等编写测试,但是编写这些测试非常简单。您不会重复任何工作:无论您是否开始使用 Redux,您编写测试所花费的时间都将大致相同。
关于使用或不使用 Redux 的一般概念:创建 Redux 的 Dan Abramov 建议从普通 React 开始,然后仅在发现需要时才添加 Redux。