如何模拟库函数(测试redux动作创建者)

时间:2016-06-13 18:58:31

标签: unit-testing mocha redux

我在“ Redux-world ”中有例子

我有动作创建者(简单功能):

import { v4 } from 'node-uuid';

export const addTodo = (text) => ({
  type: 'ADD_TODO',
  id: v4(),
  text,
});

我已经测试了它(docs):

import { addTodo } from '../actions'
...
it('should create an action for add todo', () => {
    const text = 'test v4 call'
    const expectedAction = {
      type: 'ADD_TODO',
      text,
      id: 'fake-v4-id', // ???
    }

    expect(addTodo(text).toEqual(expectedAction)
  })

当然,我有不同的v4 ID:

v4 different ids

直接在我的测试中使用v4(更改:id: 'fake-v4-id' -> id: v4()) - 不解决问题。 Ids会有所不同。

我需要什么?模拟,覆盖?或者是其他东西?我怎么做呢?

我的测试框架是Mocha,断言库是 - Chai。

1 个答案:

答案 0 :(得分:2)

Recipie是:

  1. 安装babel-plugin-rewire

  2. .babelrc中设置测试环境(有点像这样)

    {   “预设”:[“es2015”,“stage-0”,“react”,“react-hmre”],   “env”:{     “测试”:{       “插件”:[“重新布线”]     }   } }

  3. 安装babel-cli(如果你还没有)

  4. 在package.json中键入test命令,如下所示:

    NODE_ENV =测试babel-node node_modules / .bin / _mocha -r --recursive

  5. *为什么_mocha? (link for issue

    好的,设置已准备就绪。现在编辑测试文件:

    import { __RewireAPI__, addTodo } from '../actions'
    ...
    describe('Todo actions', () => {
    
      before(() => {
        __RewireAPI__.__Rewire__('v4', () => 'fake-v4-id')
      })
    
      it('should create an action for add todo', () => {
        const text = 'test v4 call'
        const expectedAction = {
          type: 'ADD_TODO',
          text,
          id: 'fake-v4-id',
        }
    
        expect(addTodo(text)).toEqual(expectedAction)
      })
    
    })
    

    运行npm test