我正在编写一个Jasmine测试(此处简化示例),需要验证类似的事情。
让我们说一个对象:
var obj = {
apple: true,
banana: true,
grape: false,
lemon: true
}
我的测试是验证obj的所有属性都是真的。
所以我写道:
it('should have all properties as true.', function(){
for(var i in obj){
expect(obj[i]).toBe(true);
}
})
现在,当这个测试运行时,它将失败,因为葡萄是假的。但是,输出并没有告诉我哪个属性(葡萄)失败了。
我想自定义输出,以便它告诉我葡萄属性失败了。所以,我想这样做: Over-ride期望函数以某种方式打印这样的东西:
Expected false to be true for grape
我知道我可以在个人的描述中循环这些'它'每个属性的块。但是,让我们说“对象”。只有在beforeEach块中初始化后,对象才可用,因此这对我来说不是一个选项。
有什么建议吗?
答案 0 :(得分:2)
您可以通过以下方式创建custom error message:
for(var i in obj){
expect(obj[i]).toBe(true, "Expected '" + obj[i] + "' to be true");
}
答案 1 :(得分:0)
您可以像这样编写自定义匹配器:
beforeEach(function () {
jasmine.addMatchers({
toBeAll: function () {
return {
compare: function (obj, expected) {
var failedProps = [];
for (var prop in obj) {
if (obj[prop] != expected) {
failedProps.push(prop);
}
}
var result = {
pass: true
};
if (failedProps.length > 0) {
result.pass = false;
result.message = "Expected '"+failedProps.join("' & '")+"' to be " + expected;
}
return result;
}
};
}
});
});
it('should have all properties as true.', function () {
expect(obj).toBeAll(true);
});