Should.js – 确定多个对象中的单个字段与单个对象之间的等式

我正在用美妙的Mocha和Should.js来testingapi。

我做一个GET并接收一个对象数组,例如:

[{ username: 'boris', something: 123 }, { username: 'jeremy', something: 456 }, { username: 'steven', something: 789 }, { ... }, { ... }, { ... }] 

对于每个对象,我想确保用户名值匹配不同对象中的属性:

 mockUsernames = { a : 'bill', b : 'ben', c : 'boris' }; 

你怎么能做到这一点? 作为一个例子,我想要这样的东西:

 .get() ... var someData = res.body; someData.forEach(function (e){ e.username.should.equal(mockUsernames.a || mockUsernames.b || mockUsernames.c); }); ... 

不出所料,这不起作用,因为should.equal使用相等的比较运算符。

任何推荐的should.js方法将被v.appreciated。 我似乎无法find我想要的东西,或者应该以不同的方式处理。

假设mockUserNames (或其中包含的名称)也可以是一个数组,你有几个select:

 // Check one by one someData.forEach(function(e) { mockUsernames.should.containEql(e.username); }); // Check all in one go mockUsernames.should.containDeep(someData.map(function(d) { return d.username; })); // If someData contains the same name multiple times, the previous method fails. // Using `lodash` we can generate a list of unique names. var _ = require('lodash'); var names = _.uniq(_.pluck(someData, 'username')); mockUsernames.should.containDeep(names); 

文档:

  • containEql
  • containDeep

我可以这样build议:

 var should = require('should'); var res = [{ username: 'boris', something: 123 }, { username: 'jeremy', something: 456 }, { username: 'steven', something: 789 }]; var mockUsernames = [ 'bill', 'ben', 'boris']; res.should.matchEvery(function(it) { return mockUsernames.indexOf(it.username) >= 0 }); /* throws AssertionError: expected Array [ Object { something: 123, username: 'boris' }, Object { something: 456, username: 'jeremy' }, Object { something: 789, username: 'steven' } ] to match each Function { name: '' } expected Object { something: 456, username: 'jeremy' } to match Function { name: '' } at Assertion.fail (/Users/den/Projects/shouldjs/should.js/lib/assertion.js:180:17) at Assertion.prop.value (/Users/den/Projects/shouldjs/should.js/lib/assertion.js:65:17) ... */ mockUsernames = ['boris', 'steven', 'jeremy']; res.should.matchEvery(function(it) { return mockUsernames.indexOf(it.username) >= 0 });//not throws