您好:需要chai
断言的帮助。
我有一个JSON响应,如下所示。我想断言它只包含“姓氏必须”。
我尝试使用此语句,但我得到的错误是AssertionError: expected [ Array(2) ] to have a deep property '#text'
。请帮助如何正确地写这个。
使用期望
chai.expect(data.response.error).to.have.deep.property('#text', 'Lastname is mandatory.');
使用
data.response.error.should.have.deep.property('#text', 'Lastname is mandatory.');
响应JSON
{
response: {
error: [
{
'@id': '1000',
'#text': 'Firstname is mandatory.'
},
{
'@id': '10001',
'#text': 'Lastname is mandatory.'
}
],
result:
{
status: '0'
}
}
}
答案 0 :(得分:5)
deep
与property
的使用要求您将完整路径传递到要测试的媒体资源。换句话说,deep.property
不会为您搜索所有属性。正如documentation所说:
如果设置了
deep
标志,则可以使用点和括号表示法对对象和数组进行深层引用。
类似的东西:
data.response.should.have.deep.property("error[0].#text");
或者,如果您使用should
的对象是数组,则可以使用数组索引启动属性的路径:
data.response.error.should.have.deep.property("[0].#text");
以下是从您显示的代码派生的完整示例:
const chai = require("chai");
chai.should();
const data = {
response: {
error: [
{
'@id': '1000',
'#text': 'Firstname is mandatory.'
},
{
'@id': '10001',
'#text': 'Lastname is mandatory.'
}
],
result:
{
status: '0'
}
}
};
it("works", () => {
data.response.should.have.deep.property("error[0].#text");
// Or this, which looks weird but is allowed...
data.response.error.should.have.deep.property("[0].#text");
});
OP正在使用早于版本4的Chai版本。如果您使用的是Chai版本4及更高版本,则使用的标志不再是.deep
,而是.nested
。因此,在版本4或更高版本中使用data.response.should.have.deep.property("error[0].#text");
的早期版本中,您将使用data.response.should.have.nested.property("error[0].#text");
答案 1 :(得分:0)