我有一些发送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来测试带有两个不同对象的“消息”吗?

也许看起来像assert.deepEqual(message, test_message1 || test_message2)

(assert.deepEqual(message, test_message1) || assert.deepEqual(message, test_message2))

最佳答案

Chai使用deep-eql库执行深度相等检查。这显示了如何使用它来检查一个对象与一组对象中的一个对象是否完全相等。在这里,我们测试的对象是q,我们要确保它与message1message2中的至少一个深度相等。将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");

09-18 20:14