我有一个发送2个对象的函数:
function A(){
var message = {
cmd: 'one',
msg: {
type: 'test',
id: 1
}
sendTest(message)
message = {
cmd: 'two',
msg: {
type: 'test_a',
id: 2
}
sendTest(message)
}
我可以在单元测试中使用assert.deepEqual来测试带有2个不同对象的“消息”吗?
可能看起来像assert.deepEqual(message, test_message1 || test_message2)
或(assert.deepEqual(message, test_message1) || assert.deepEqual(message, test_message2))
答案 0 :(得分:1)
Chai使用deep-eql库执行深度相等的检查。这显示了如何使用它来检查对象是否与集合中的一个对象完全相等。我们测试的对象是q
,我们希望确保它与message1
或message2
中的至少一个完全相同。将q
更改为某个随机值,以查看测试失败。编写代码可以轻松检查更长的可能消息列表。
var assert = require("chai").assert;
var eql = require("deep-eql");
var message1 = {
cmd: 'one',
msg: {
type: 'test',
id: 1
}
};
var message2 = {
cmd: 'two',
msg: {
type: 'test_a',
id: 2
}
};
var q = {
cmd: 'one',
msg: {
type: 'test',
id: 1
}
};
var found;
var candidates = [message1, message2];
for(var i = 0; !found && i < candidates.length; ++i)
if (eql(candidates[i], q))
found = candidates[i];
assert.isDefined(found, "did not find a match");