不可变的Chai断言错误,而预期的结果等于
immutable Chai Assertion error while expected equals result
我一直在使用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()
。谢谢你的帮助。
我找到了原因,而不是:
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
})
)
}));
不需要的[]
,并创建一个附加列表。
我认为您的断言类型错误。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')
相关文章:
- 奇怪的Javascript结果
- Javascript(jQuery)给了我奇怪的结果
- JSONP请求返回结果,但也触发error_callback
- 如何在chrome扩展中存储数据/结果,以及如何使用setTimeout使其只被调用一次
- Javascript,输出结果后页面不断刷新
- 这是使用html快照和谷歌获取的预期结果吗?SEO/SPA
- 将地理编码结果转换为php变量以发布到mysql数据库
- AngularJS/HTML/Bootstrap元素用于动态搜索结果
- JQuery:向多个匹配结果添加换行符的最简单方法
- 当查询不在displayField中时,引导Ajax Typeahead不显示结果
- webpack代码拆分了handlerbs文件——结果是文件很大
- JavaScript循环无法正确计算/显示结果
- 相同的RegExp返回不同的结果-第一次是正确的结果,第二次是null
- Node.js使用Series函数(模式?)实现流控制时出现意外结果
- 试图将onChange函数作为道具传递给GrandChlidren,结果是TypeError:这是未定义的
- jQuery使用api获取typeform结果
- 根据条件检查数据库结果
- 什么'这是从第三个函数上的async 1st函数获得结果的更好方法
- Angular,表达式{{}}的结果没有插入到ng-click中
- 不可变的Chai断言错误,而预期的结果等于