2016-06-13 3 views
1

У меня есть пример в «Redux-мире»Как издеваются библиотеки функций (тестирование перевождите действия создателя)

У меня есть действие создатель (простая функция):

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 идентификаторы:

v4 different ids

Использование v4 в моем тесте напрямую (изменение: id: 'fake-v4-id' -> id: v4()) - не решает проблему. Идентификаторы будут разными.

Что мне нужно? Макет, переопределение? Или что-то другое? И как я могу это сделать?

Мой тестовый фреймворк - Mocha, а библиотека утверждений - Chai.

ответ

0

Recipie является:

  1. установки babel-plugin-rewire

  2. набор тест окр в .babelrc (что-то, как это)

    { "пресеты": [ "es2015", «stage-0», «реакция», «реакция-hmre»], «env»: { «тест»: { «плагины»: ["rewire"] } }}

  3. установить столпотворение-кли (если вы еще не сделали)

  4. Тип тестовую команду в вашем package.json так:

    NODE_ENV = тест столпотворение-узел node_modules /.bin/_mocha -r --recursive

* почему _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) 
    }) 

}) 

Run npm test

+0

Не следует, что, например, содержать 'after', который называет' ComponentToTest .__ ResetDependency __ ('v4'); '? – machineghost

+0

@machineghost, hm ... может быть. Выглядит приветливо, но я не знаю об этом. –