gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 19:24:33 25 4
gpt4 key购买 nike

这里有一些背景信息。我正在开发一个使用 React 和 Immutable.js 的项目,该项目是用 ES6 编写的。我使用 Babel 和 webpack。

我使用 Mocha、Chai 和 jsdom 编写了一些单元测试,以便它们可以在浏览器之外执行。

问题在于某些组件正在使用诸如需要图像之类的东西。这些东西是由 webpack 通过特定的 loader 来处理的。

因此,当在终端中运行测试时,它们会因为这些意外的要求而失败。

我找到了如何通过使用 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.<anonymous> (/Users/boris_louboff/Labs/VotingApp/voting-client/test/tests.bundle.js:36413:42 <- webpack:///test/reducer.spec.js:21:29)

所有其他未测试与 Immutable 相关的测试都通过了。

如果有人知道如何解决这个问题,那就太好了!谢谢。

最佳答案

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

期望 to.equal 的行为似乎因环境(Node 或浏览器)而异。

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 !

关于webpack - 使用 Karma 运行时,使用 Immutable.js 的 Mocha 测试失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34040939/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com