.toHaveBeenCalledWith Jasmine.objectContaining 不命名所有键的部分匹配
.toHaveBeenCalledWith Jasmine.objectContaining partial match without naming all keys
我无法解决仅作为部分匹配来检查函数调用的内容的可能性。
我有另一个测试来检查完整传递的参数,但我只想在一条数据发生变化时重新测试。
我想避免一遍又一遍地输入 jasmine.anything()
,所以理想情况下只想检查传递的对象中的一个键。
实际代码:
myThing.add(
"foo",
{
aCheck : true,
anObject: {}
aString: "foo",
aBool: true // I care whether it was passed as true or false
},
{ another: "object" }
)
所以我的断言是:
expect(myThing.add).toHaveBeenCalledWith(
jasmine.objectContaining({
aBool: true
})
);
或
expect(myThing.add).toHaveBeenCalledWith(
jasmine.objectContaining({
aBool: false
})
);
我可以开始添加所有其他数据位,但它变得混乱:
expect(myThing.add).toHaveBeenCalledWith(
jasmine.any(String),
jasmine.objectContaining({
aCheck : jasmine.anything(),
anObject: jasmine.any(Object)
aString: jasmine.any(String),
aBool: true
}),
jasmine.any(Object)
);
但是由于对象中的数据量很大,因此很难调试。
如何才能只部分检查作为第二个参数调用的对象?
您可以利用每次调用该函数时都会调用的 callFake
。
spyOn(myThing, 'add').and.callFake((arg1, arg2, arg3) => {
console.log('myThing.add was called');
expect(arg2.aBool).toBe(true);
});
您也可以利用 argsForCall
或 mostRecentCall.args
。
http://tobyho.com/2011/12/15/jasmine-spy-cheatsheet/
我无法解决仅作为部分匹配来检查函数调用的内容的可能性。
我有另一个测试来检查完整传递的参数,但我只想在一条数据发生变化时重新测试。
我想避免一遍又一遍地输入 jasmine.anything()
,所以理想情况下只想检查传递的对象中的一个键。
实际代码:
myThing.add(
"foo",
{
aCheck : true,
anObject: {}
aString: "foo",
aBool: true // I care whether it was passed as true or false
},
{ another: "object" }
)
所以我的断言是:
expect(myThing.add).toHaveBeenCalledWith(
jasmine.objectContaining({
aBool: true
})
);
或
expect(myThing.add).toHaveBeenCalledWith(
jasmine.objectContaining({
aBool: false
})
);
我可以开始添加所有其他数据位,但它变得混乱:
expect(myThing.add).toHaveBeenCalledWith(
jasmine.any(String),
jasmine.objectContaining({
aCheck : jasmine.anything(),
anObject: jasmine.any(Object)
aString: jasmine.any(String),
aBool: true
}),
jasmine.any(Object)
);
但是由于对象中的数据量很大,因此很难调试。
如何才能只部分检查作为第二个参数调用的对象?
您可以利用每次调用该函数时都会调用的 callFake
。
spyOn(myThing, 'add').and.callFake((arg1, arg2, arg3) => {
console.log('myThing.add was called');
expect(arg2.aBool).toBe(true);
});
您也可以利用 argsForCall
或 mostRecentCall.args
。
http://tobyho.com/2011/12/15/jasmine-spy-cheatsheet/