Testing 与Chai的Redux测试问题

Testing 与Chai的Redux测试问题,testing,redux,mocha.js,chai,Testing,Redux,Mocha.js,Chai,我正在学习react redux,我目前正在使用TDD实现一些减缩器。我正在使用一个示例应用程序,它只是一个用于添加/删除/打开/关闭注释的记事本 我正在做一些添加新音符的测试,但是第二个“it”失败了,引发我的错误如下: 1)AddNote reducer应返回两个注释: 断言错误:预期{Object(id-123,id-456)}等于{Object(byId,id,…)} describe('AddNote reducer' , () => { it('should retur

我正在学习react redux,我目前正在使用TDD实现一些减缩器。我正在使用一个示例应用程序,它只是一个用于添加/删除/打开/关闭注释的记事本

我正在做一些添加新音符的测试,但是第二个“it”失败了,引发我的错误如下:

1)AddNote reducer应返回两个注释: 断言错误:预期{Object(id-123,id-456)}等于{Object(byId,id,…)}

describe('AddNote reducer' , () => {
    it('should return a new note', () => {
        const state = getMockState.withNoNotes();
        const actualNextState = reducers.byId(
            state.byId, actions.addNote(
                'Hello World', 'id-123', 1));
        const expectedNextState = {
            'id-123': {
                id: 'id-123',
                content: 'Hello World',
                timestamp: 1
            }
        };
        expect(actualNextState).to.deep.equal(expectedNextState);
    });

    it('should return two notes', () => {
        const state = getMockState.withOneNote();
        const actualNextState = reducers.byId(state.byId, actions.addNote('Bye bye world!', 'id-456', 2));
        const expectedNextState = {
            ...state,
            'id-456': {
                id: 'id-456',
                content: 'Bye bye world!',
                timestamp: 2
            }
        };
        expect(actualNextState).to.deep.equal(expectedNextState);
    });
});
我还使用了一个助手,在这里

这个想法是,如果我在第一种情况下添加一个注释,它将返回一个新的状态,其中只包含该注释,但在第二种情况下,它将返回一个包含前一个注释的状态,加上新注释。 我正在使用带有摩卡的图书馆

如果有帮助的话,这里是状态的输出(它是一个控制台日志),我认为这是可以的

{ 'id-123': { id: 'id-123', content: 'Hello World', timestamp: 1 } }
    √ should return a new note
{ 'id-123': { id: 'id-123', content: 'Hello world', timestamp: 1 },
  'id-456': { id: 'id-456', content: 'Bye bye world!', timestamp: 2 } }
    1) should return two notes
这是我的减速机

import { merge } from 'ramda';

export const byId = (state={}, {type, payload}) => {
    switch(type) {
        case 'app/addNote':
            console.log(merge(state, { [payload.id]: payload})) ;
            return merge(state, { [payload.id]: payload});
        default:
            return state;
    }
};

有什么想法吗?提前谢谢

您的
expectedState
不正确。您正在比较
byId
切片的“下一个状态”,但是
expectedNextState
扩展了整个状态。实际上应该是:

const expectedNextState = {
    ...state.byId,
    'id-456': {
        id: 'id-456',
        content: 'Bye bye world!',
        timestamp: 2
    }
};
const expectedNextState = {
    ...state.byId,
    'id-456': {
        id: 'id-456',
        content: 'Bye bye world!',
        timestamp: 2
    }
};