Я тестирование этого редуктора:Jest.js тесты не проходят, когда ожидаемые/полученные значения являются объектами
const todo = (state = {}, action) => {
switch(action.type) {
case 'ADD_TODO':
return {
id: action.id,
text: action.text,
completed: false
}
case 'TOGGLE_TODO':
if(state.id !== action.id) {
return state;
}
return {...state, completed: !state.completed};
default:
return state;
}
}
const todos = (state = [], action) => {
switch(action.type) {
case 'ADD_TODO':
return [
...state,
todo(undefined, action)
]
case 'TOGGLE_TODO':
return state.map(item => todo(item, action));
default:
return state;
}
}
export default todos;
С помощью этого теста:
import todos from './todos';
test('creates a new todo',() => {
const stateBefore = [];
const action = {
type: 'ADD_TODO',
id: 0,
text: 'test'
};
const stateAfter = [{
id: 0,
text: 'test',
completed: false
}];
expect(JSON.stringify(todos(stateBefore, action))).toBe(JSON.stringify(stateAfter));
});
Проблемы в том, что мои тестах не с замечанием Compared values have no visual difference
, если я удалю вызовы JSON.stringify()
- я получаю, что сравнение объекта с объектом создает некоторые проблемы из-за ссылки, но мне нужно использовать JSON.stringify()
или прокручивать ключи объектов, чтобы сравнивать их каждый раз?