13 javascript arrays tdd object chai
柴有一种include方法.我想测试一个对象是否包含另一个对象.例如:
var origin = {
name: "John",
otherObj: {
title: "Example"
}
}
Run Code Online (Sandbox Code Playgroud)
我想用Chai来测试这个对象是否包含以下内容(它确实如此)
var match = {
otherObj: {
title: "Example"
}
}
Run Code Online (Sandbox Code Playgroud)
这样做似乎不起作用:
origin.should.include(match)
Run Code Online (Sandbox Code Playgroud)
eag*_*eye 22
嘿,刚出版的柴子.看看这个:https://www.npmjs.org/package/chai-subset 这应该适合你)
var chai = require('chai');
var chaiSubset = require('chai-subset');
chai.use(chaiSubset);
var obj = {
a: 'b',
c: 'd',
e: {
foo: 'bar',
baz: {
qux: 'quux'
}
}
};
expect(obj).to.containSubset({
e: {
foo: 'bar',
baz: {
qux: 'quux'
}
}
});
Run Code Online (Sandbox Code Playgroud)
Dav*_*lin 14
在包括和包含断言可以用作任一基于属性的语言链或作为方法来断言的对象的在包含阵列中一个或一个子字符串.当用作语言链时,它们切换键断言的包含标志.[强调我的]
因此,如果您在对象(不是数组或字符串)上调用include,那么它仅用于切换键断言的contains标志.通过您的示例的外观,测试深度相等会更有意义,可能首先检查密钥.
origins.should.include.keys("otherObj");
origins.otherObj.should.deep.equal(match.otherObj);
Run Code Online (Sandbox Code Playgroud)
实际上,现在我浏览其他例子,你可能会对此最开心:
origins.should.have.deep.property("otherObj", match.otherObj)
Run Code Online (Sandbox Code Playgroud)
例如,在 chai 4.2.0 中,您可以使用 deep include
chaijs 文档示例:
// Target array deeply (but not strictly) includes `{a: 1}`
expect([{a: 1}]).to.deep.include({a: 1});
expect([{a: 1}]).to.not.include({a: 1});
// Target object deeply (but not strictly) includes `x: {a: 1}`
expect({x: {a: 1}}).to.deep.include({x: {a: 1}});
expect({x: {a: 1}}).to.not.include({x: {a: 1}});
Run Code Online (Sandbox Code Playgroud)
如果您知道子对象的级别,您可以简单地使用:
expect(origin.otherObj).to.include(match.otherObj);
Run Code Online (Sandbox Code Playgroud)
https://www.chaijs.com/api/bdd/