Node.js assert.deepEqual 2个值

时间:2013-12-05 09:49:26

标签: javascript node.js unit-testing assert mocha

我有一个发送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))

1 个答案:

答案 0 :(得分:1)

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");