Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 编写React/Redux时如何接近TDD_Javascript_Reactjs_Tdd_Redux - Fatal编程技术网

Javascript 编写React/Redux时如何接近TDD

Javascript 编写React/Redux时如何接近TDD,javascript,reactjs,tdd,redux,Javascript,Reactjs,Tdd,Redux,我正在使用TDD编写一个React/Redux应用程序。问题是,考虑到我想要使用的所有样板文件,如何开始编写新应用程序的第一步 根据TDD,为了通过测试,我应该只编写最少的代码,然后再进行重构。例如,我是否应该从没有Redux开始,然后重构并引入Redux?考虑到Redux的样板(stores/Reducer/wrapper元素等),我将进行相当大的重构 我理解TDD方法的巨大优势。问题是,是否“允许”使用超过最小代码集的更好方法来通过测试,在这种情况下..我首选的方法是先测试react,然后根

我正在使用TDD编写一个React/Redux应用程序。问题是,考虑到我想要使用的所有样板文件,如何开始编写新应用程序的第一步

根据TDD,为了通过测试,我应该只编写最少的代码,然后再进行重构。例如,我是否应该从没有Redux开始,然后重构并引入Redux?考虑到Redux的样板(stores/Reducer/wrapper元素等),我将进行相当大的重构


我理解TDD方法的巨大优势。问题是,是否“允许”使用超过最小代码集的更好方法来通过测试,在这种情况下..

我首选的方法是先测试react,然后根据提供给它的道具检查组件是否正确渲染

大概是这样的:

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')
  })
})
从“../../src/containers/App”导入{App};
从“React”导入React;
从“react dom”导入react dom;
进口{
渲染文档,
SCryRenderdDomComponentSwithTag
}来自“react插件测试utils”;
从“chai”导入{expect};
描述('主页',()=>{
它('如果isAuthenticated为false,则应显示登录页面',()=>{
常量组件=renderIntoDocument(
);
const buttons=scryRenderedDOMComponentsWithTag(组件,'button')
expect(按钮长度).to.be.equal(1)
});
它('如果isAuthenticated为true,则应显示欢迎文本',()=>{
常量组件=renderIntoDocument(
);
const text=scryRenderDomComponentSwithTag(组件,'h1')
expect(text).to.have.string('welcome'))
})
})
然后,我将为redux添加测试,以检查状态是否根据提供给reducer的输入而改变


这最终取决于您的偏好。

Redux不会影响您编写最少代码以通过每个单独测试的能力

你的个人反应组件只是拿道具和做/展示一些东西。您对这些组件的单元测试不应该关心这些道具是以标准的React方式通过的,还是通过React-redux插入的。因此,Redux的存在不会影响您以最少的代码通过React组件测试的能力

还有一些小的例外,例如将组件状态移动到Redux状态,或者更改处理副作用的方式(例如从API获取数据)。这些类型的更改可能需要对测试进行一些更改,但它们可能会使测试变得更简单

当然,如果您添加Redux,您必须为新的Redux还原器/动作创建者/选择器等编写测试,但是编写这些测试非常简单。您不会重复任何工作:无论您是否开始使用Redux,您花在编写测试上的时间都是一样的


关于开始使用或不使用Redux的一般概念:创建Redux的丹·阿布拉莫夫建议从简单的React开始,然后在需要时才添加Redux。

好的,这听起来很合理。我主要关心的是开始阶段,那时我还没有任何东西。我将写一个E2E测试,涵盖一个基本流程。然后,我将不得不编写最少的代码(可能是纯react组件)。然后我必须重构并添加Redux,这需要大量的样板文件(还原程序、动作创建者等)。所以,这一步是重构,我通常不会在重构时编写测试。我想知道如何实现这些步骤