【问题标题】:Basic React/redux testing with mocha/chai使用 mocha/chai 进行基本的 React/redux 测试
【发布时间】:2016-05-04 20:45:43
【问题描述】:

我是 react/redux 世界的新手,我使用 this code 创建了 redux 待办事项应用程序,现在我想为它编写测试,我创建了以下规范:

import {expect} from 'chai'
import todoApp from '../src/reducers'
import {setVisibilityFilter} from '../src/actions'

describe('reducer', ()=> {
    it('Set correctly visibility filter', ()=>{
        const setVisibilityFilterAction = setVisibilityFilter('SHOW_ALL')
        const initialState={};
        const nextState= todoApp(initialState, setVisibilityFilterAction)
        const expectedState ={
                todos:[],
                visibilityFilter:'SHOW_ALL' 
            }
        expect(nextState).to.equal(expectedState);
    })
})  

但是断言失败并且错误是:

AssertionError: expected { Object (todos, visibilityFilter) } to equal { Object (todos, visibilityFilter) }
      + expected - actual

尝试打印对象,它们(expectedStatenextState)都具有相同的数据:

{
   todos:[],
   visibilityFilter: "SHOW_ALL"
}

为什么会失败?

【问题讨论】:

  • 嗨,一个单独的问题:您如何设法测试 es6 代码?你是在node里运行的吗?你在用 babel 吗?
  • 是的,我正在使用 babel。你需要一个 es6 的转译器(至少现在是这样)

标签: reactjs mocha.js redux chai


【解决方案1】:

来自 Chai 的expect 接口的equal() 是严格的相等检查。听起来你想要eql().deep.equal()

// Equivalent to nextState === expectedState
expect(nextState).to.equal(expectedState);

// Instead:
expect(nextState).to.eql(expectedState);

// Or:
expect(nextState).to.deep.equal(expectedState);

【讨论】:

  • 它与 eql() 一起工作,但是,为什么来自 teropa.info/blog/2015/09/10/full-stack-redux-tutorial.html 的测试使用 equals 并且有效?和 immutable.js 有关系吗?
  • 我不知道,也许吧。那些.equal(List.of( 的例子在我看来实际上并不像它们会工作,但我没有运行它。 (总的来说,博客/教程中的很多代码都有错误。)无论如何,你的问题的答案是你不能只使用equal()
猜你喜欢
  • 2018-03-12
  • 2017-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-15
  • 1970-01-01
  • 2023-03-22
  • 2017-02-04
相关资源
最近更新 更多