2015-12-02 2 views
5

вот какой-то контекст. Я работаю над проектом с использованием React и Immutable.js, написанных на ES6. Я использую Babel и webpack.Тесты Mocha с использованием Immutable.js терпят неудачу при работе с кармой

Я написал некоторые модульные тесты с использованием Mocha, Chai и jsdom, чтобы их можно было выполнить за пределами браузера.

Проблема в том, что некоторые компоненты используют такие вещи, как требуемые изображения. Этот материал обрабатывается webpack через конкретный загрузчик.

Поэтому при запуске тестов в терминале они терпят неудачу из-за этих необработанных запросов.

Я нашел, как исправить это, используя Karma (оставляя возможность запуска тестов за пределами браузера) и компиляции источников перед запуском тестов, и сделайте так, чтобы конфигурация webpack просто игнорировала загрузчик изображений (используя нуль- погрузчик).

В этот момент тесты выполняются через Karma, но некоторые из них терпят неудачу, в то время как они проходят, когда они запускаются через терминал (я прокомментировал строки, где был требуемый материал, только для целей теста).

Испытание, которое терпит неудачу, связано с Immutable.js, что означает, что я пытаюсь проверить равенство двух неизменяемых объектов.

Вот Exemple теста:

it('handles SET_STATE',() => { 
    const initialState = Map(); 
    const action = { 
     type : 'SET_STATE', 
     state : Map({ 
      vote : Map({ 
       pair : List.of('Trainspotting', '28 Days Later'), 
       tally : Map({ 'Trainspotting' : 1 }) 
      }) 
     }) 
    }; 

    const nextState = reducer(initialState, action); 

    expect(nextState).to.equal(fromJS({ 
     vote: { 
      pair: ['Trainspotting', '28 Days Later'], 
      tally: { 'Trainspotting': 1 } 
     } 
    })); 
}); 

Провал дает что-то вроде этого:

1) handles SET_STATE 
    reducer 
    AssertionError: expected { Object (size, _root, ...) } to equal { Object (size, _root, ...) } 
    at Context.<anonymous> (/Users/boris_louboff/Labs/VotingApp/voting-client/test/tests.bundle.js:36413:42 <- webpack:///test/reducer.spec.js:21:29) 

Всех остальных тестов, которые не испытывая вещи, связанные с непреложным проезжают.

Если у кого-то есть представление о том, что может решить это, было бы здорово! Спасибо.

ответ

6

Я, наконец, нашел, в чем проблема!

Ожидание to.equal, по-видимому, ведет себя по-разному в зависимости от окружающей среды (Узел или браузер).

const map1 = Map({a: 1, b: 2}); 
const map2 = Map({a: 1, b: 2}); 

// In Node 
expect(map1).to.equal(map2) // true 

// In a browser 
expect(map1).to.equal(map2) // false 

Решение заключается в использовании API .is Immutable.js()

expect(Immutable.is(map1, map2)).to.be.true // true in both Node and browser ! 
+1

Хорошо, жаль об этом недостоверной информации ... Существует что-то я совсем забыл, о котором было работая с окружающей средой Node ... chai-immutable module !!! Это делало работу по оживлению! Я пытаюсь заставить его работать с версией Karma ... – websilone

3

Хотя ваше предложение работы, это часть кода, необходимые для решения этой проблемы:

import chai from 'chai'; 
import chaiImmutable from 'chai-immutable'; 

chai.use(chaiImmutable); 

После его добавления expect(map1).to.equal(map2) // true работает в карме. Но я не нашел способ, чтобы включить это во всех моих тестах файл, как вы можете сделать с мокко с командой

mocha --compilers js:babel-core/register --require ./test/test_helper.js\"test/**/*@(.js|.jsx)\" 
Смежные вопросы