我在每个对象中都有一些嵌套对象,我想用chai检查图像的hrefs是以' http://'
开头的{
"images": [
{
"header": {
"href": "http://somedomain.com/assets/header.jpg"
}
},
{
"logo": {
"href": "http://somedomain.com/assets/logo.jpg"
}
}
]
}
问题是,我不能只关闭图片名称属性,因为它会改变...所以我不能这样做:
images[0].[image name changes!! it's not a concrete property name].href.should.have.deep.property("href");
因为图片名称类似于标题','徽标'等等
那么我怎么能用chai做这个,并检查每个图像的href,以确保它有文字' http://'?
答案 0 :(得分:1)
您可以动态迭代images
数组中的所有对象,如@gfpacheco在答案中所建议的那样。
但我会研究一种创建确定性测试的方法。这将简化您的断言,但可能需要一些创造力或重构来模拟或渲染灯具
答案 1 :(得分:0)
我试着编写整个Chai断言函数。它使用Chai Things插件来处理数组上的断言:
var data = {...};
function startsWithHttp(string) {
return string.indexOf('http://') === 0;
}
data.images.should.all.satisfy(function(image) {
Object.keys(image).should.contain.an.item.that.satisfy(function(key) {
image[key].should.have.all.keys('href');
image[key].href.should.satisfy(startsWithHttp);
});
});
它假定所有图像都应至少有一个属性,其值必须具有href
属性,并且其值以http://
开头。
答案 2 :(得分:0)
正如我所说的@ dm03514,很难找到确定性的方法。我得到href
的子字符串,并验证是否等于(并迭代@gfpacheco如何做)。我尝试为他们提供相同的环境:
var http = "http://";
if(header.href.substr(0,7) === http)
alert("Header ok");
else
alert("Header no ok")
https://jsfiddle.net/lbclucascosta/zhrfLa8m/2/
Obs:这是纯粹的javascript,但您也可以在节点中获取子字符串。 nodejs: string manipulation