当前位置:  开发笔记 > 编程语言 > 正文

当使用Karma运行时,使用Immutable.js的Mocha测试失败

如何解决《当使用Karma运行时,使用Immutable.js的Mocha测试失败》经验,为你挑选了1个好方法。

这是一些背景.我正在使用用ES6编写的React和Immutable.js开发一个项目.我使用Babel和webpack.

我使用Mocha,Chai和jsdom编写了一些单元测试,因此可以在浏览器外执行.

问题是某些组件正在使用诸如需要图像之类的东西.这个东西由webpack通过特定的加载器处理.

因此,当在终端中运行测试时,由于这些未满足的要求,它们会失败.

我发现如何通过使用Karma解决这个问题(留下在浏览器之外运行测试的能力)并在运行测试之前编译源代码并使其成为webpack配置只是忽略图像加载器(使用null-loader).

那时,测试是通过Karma运行的,但是其中一些是失败的,而当它们通过终端运行时它们正在通过(我评论了那些有需求的行,只是为了测试的目的).

失败的测试都与Immutable.js有关,这意味着我正在尝试测试两个Immutable对象的相等性.

这是一个测试的例子:

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. (/Users/boris_louboff/Labs/VotingApp/voting-client/test/tests.bundle.js:36413:42 <- webpack:///test/reducer.spec.js:21:29)

所有其他没有测试与Immutable相关的东西的测试都在通过.

如果有人知道什么可以解决这个问题那就太棒了!谢谢.



1> websilone..:

我终于找到了问题所在!!

根据环境(节点或浏览器),期望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

解决方案是使用Immutable.js API .is()

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

推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有