期待这个或那个,如何在单元测试中包含OR

时间:2016-02-14 21:36:49

标签: javascript unit-testing expect assertions buster.js

我正在使用buster.js和“expect”断言。我希望断言至少在以下一个方面取得成功:

expect(req.body.data._id).toBe('foo bar baz');

expect(req.body.data.id).toBe('foo bar baz');

我该怎么做?

3 个答案:

答案 0 :(得分:2)

看看你想要的relevant documentation

expect([req.body.data._id, req.body.data.id]).toContain('foo bar baz');

答案 1 :(得分:2)

虽然@glenn jackman的答案足够好,但为了获得更多与语义相关的阅读,你可以使用Array.prototype.some函数和一些isEqual模拟。例如:

var isEqual = function(first) { return function(second) { return first === second; }; }

[1,2,3].some(isEqual(2); // true

expect([1,2,3].some(isEqual(2))).toBeTrue(); // passed

expect([1,2,3].some(isEqual(4))).toBeTrue(); // failed

或者你可以通过这种方式走得更远:

var someOf = function(array) { return array.some.bind(array); };

expect(someOf([1,2,3])(isEqual(1))).toBeTrue(); // passed

摆脱括号:

var someOf = function(array) {
    return { isEqual: function(x) { return array.some(isEqual(x)); } };
}

expect(someOf([1,2,3]).isEqual(4)).toBeTrue();

我相信您可以使用buster.referee.add创建自定义“期望”,从而做得更多。

答案 2 :(得分:0)

expect(req.body.data._id || req.body.data.id).toBe('foo bar baz');