我一直在使用node / redux,在使用chai进行测试时我有以下内容:
AssertionError: expected 'Map { "winos": List [ Map { "id": 1, "x": 1, "y": 1, "movable": false }, Map { "id": 2, "x": 2, "y": 2, "movable": false }, Map { "id": 5, "x": 5, "y": 5, "movable": false } ] }'
to equal 'Map { "winos": List [ Map { "id": 1, "x": 1, "y": 1, "movable": false }, Map { "id": 2, "x": 2, "y": 2, "movable": false }, Map { "id": 5, "x": 5, "y": 5, "movable": false } ] }'
我已经看到这是一个已知的错误:https://github.com/astorije/chai-immutable/issues/24。 那里的人设法通过使树中的所有东西都不可变来解决这个问题,但我想我已经拥有了一切不可改变的东西。
我的代码如下:
import {List, Map} from 'immutable';
import {expect} from 'chai';
export function addWino(state, wino) {
return state.updateIn(['winos'], arr => arr.push(wino));
}
describe('setWinos', () => {
describe('addWino', () => {
it('adds a Wino', () => {
const wino = Map({
id: 5,
x:5,
y:5,
movable: false
});
const nextState = addWino(state, wino);
expect(nextState).to.equal(Map({
winos: List.of([
Map({
id: 1,
x:1,
y:1,
movable: false
})
],
[
Map({
id: 2,
x:2,
y:2,
movable: false
})
],
[
Map({
id: 5,
x:5,
y:5,
movable: false
})
])
}));
});
});
}
我也尝试过.eql()
和.to.deep.equal()
。
谢谢你的帮助。
答案 0 :(得分:1)
我找到了原因,而不是:
winos: List.of([
Map({
id: 1,
x:1,
y:1,
movable: false
})
],
[
Map({
id: 5,
x:5,
y:5,
movable: false
})
])
}));
我应该:
winos: List.of(
Map({
id: 1,
x:1,
y:1,
movable: false
}),
Map({
id: 5,
x:5,
y:5,
movable: false
})
)
}));
[]
不需要的地方,并创建一个额外的列表。
答案 1 :(得分:0)
我认为你的断言属于错误的类型。 assert.equal(和类似的)通常测试两个东西是"相同"。在对象的情况下,如果它不是完全相同的对象,则不成立。即使内容相同。寻找像" deepEqual"对于你的断言框架
见这里:https://tonicdev.com/lipp/deep-equal
var assert = require('assert')
var x = {a: 123}
var y = x
assert.equal(x, y)
var u = {a: 123}
assert.deepEqual(x, u, 'this is ok')
assert.equal(x, u, 'this fails')