Почему тест Mocha для редуктора redux не работает?

Итак, я подумал, что создал простой тест, чтобы подтвердить настройку моего тестирования mocha / chai для моих редукторов redux, но этот первоначальный тест не работает по причинам, которые я не могу понять. Все настроено в соответствии с документами babel. Ошибок, связанных с es6, нет.

Файловая структура

client
|-reducers
|    |-auth_reducer.js
|
test
|-reducers
|    |-auth.test.js

Тестовый сценарий
mocha --compilers js:babel-register --require babel-polyfill --recursive

Редуктор аутентификации

const AUTH_USER = 'AUTH_USER';
const INITIAL_STATE = { error: '', message: '', content: '', authenticated: false, user: null };

export default function (state = INITIAL_STATE, action) {
  switch (action.type) {
    case AUTH_USER:
      return { ...state, error: '', message: '', authenticated: true };
  }
  return state;
}

Проверка подлинности

import { expect } from 'chai';

import authReducer from '../../client/reducers/auth_reducer';

describe('auth_reducer', () => {

  it('handles AUTH_USER', () => {
    const initialState = { 
      error: '', 
      message: '', 
      content: '', 
      authenticated: false, 
      user: null 
    };
    const action = {
      type: 'AUTH_USER',
    };
    const nextState = authReducer(initialState, action);

    expect(nextState).to.equal({
      error: '', 
      message: '', 
      content: '', 
      authenticated: true, 
      user: null
    });
  });
});

Ошибка

auth_reducer
    1) handles AUTH_USER

  0 passing (38ms)
  1 failing

  1) auth_reducer handles AUTH_USER:

      AssertionError: expected { Object (error, message, ...) } to equal { Object (error, message, ...) }
      + expected - actual

      at Context.<anonymous> (test/reducers/auth.test.js:20:26)

npm ERR! Darwin 15.6.0
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "run" "test"
npm ERR! node v6.7.0
npm ERR! npm  v3.10.9
npm ERR! code ELIFECYCLE
npm ERR! [email protected] test: `mocha --compilers js:babel-register --require babel-polyfill --recursive`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] test script 'mocha --compilers js:babel-register --require babel-polyfill --recursive'.

person Kwhitejr    schedule 03.01.2017    source источник


Ответы (1)


Используйте deep.equal вместо equal:

expect(nextState).to.deep.equal({
  error: '', 
  message: '', 
  content: '', 
  authenticated: true, 
  user: null
});

Когда вы сравниваете объекты неглубоко, сравнивается ссылка на объекты. Когда вы используете глубокое сравнение, сравниваются свойства и значения.

Простой пример:

const a = { val1: 1, val2: 2 };
const b = { val1: 1, val2: 2 };

console.log('equality ', a === b);

console.log('deep equality ', a.val1 === b.val1 && a.val2 === b.val2);

person Ori Drori    schedule 03.01.2017
comment
Я добавил "почему" на простом примере. - person Ori Drori; 03.01.2017