检查' http://'带有Chai.js的json对象中的文本

时间:2015-09-21 14:23:49

标签: node.js chai

我在每个对象中都有一些嵌套对象,我想用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://'?

3 个答案:

答案 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