这是一些背景.我正在使用用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 }
}
}));
});
Run Code Online (Sandbox Code Playgroud)
失败就是这样的:
1) handles SET_STATE
reducer
AssertionError: expected { Object (size, _root, ...) } …Run Code Online (Sandbox Code Playgroud) 我试图了解为什么我的简单柴(使用柴不可变)测试失败。
it('should work', () => {
var currentState = Immutable.fromJS({
name: 'myName',
age: 20,
friends: []
});
var newState = currentState.merge({
name: 'someOtherName',
age: 30
});
expect(newState).to.equal(Immutable.fromJS({
name: 'someOtherName',
age: 30,
friends: []
}));
});
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?我想我缺少了一些愚蠢的东西...
谢谢,阿米特。
我正在使用chai-immutablenpm模块进行测试.这是测试:
it("runs the test", () => {
const initialState = Map();
const entries = ["entry"];
const nextState = setEntries(initialState, entries);
expect(nextState).to.equal(fromJS({
entries : ["entry"]
}));
});
Run Code Online (Sandbox Code Playgroud)
这是setEntries功能
export function setEntries(state, entries) {
return state.set("entries", List(entries));
}
Run Code Online (Sandbox Code Playgroud)
这是什么ownerID?如何解决这个问题?
编辑:
我已经从头开始创建并重写了整个文件,但它确实有效.它与上一个文件完全相同.
仍然感兴趣为什么它发生....