Jasmine 如何匹配传递给toHaveBeenCalledWith的部分嵌套属性?
我在一个回调函数上创建了一个spy,每次都会使用不同的参数调用多次。该参数是一个复杂的嵌套对象。我正在寻找具有特定属性的对象 如果我像下面那样指定所有属性,它就可以工作Jasmine 如何匹配传递给toHaveBeenCalledWith的部分嵌套属性?,jasmine,Jasmine,我在一个回调函数上创建了一个spy,每次都会使用不同的参数调用多次。该参数是一个复杂的嵌套对象。我正在寻找具有特定属性的对象 如果我像下面那样指定所有属性,它就可以工作 describe("Test", function() { it("should pass", function() { const callback = (data) => {}; const callBackSpy = jasmine.createSpy().and.callFake(callba
describe("Test", function() {
it("should pass", function() {
const callback = (data) => {};
const callBackSpy = jasmine.createSpy().and.callFake(callback);
const createData = (message) => {
return {
outerProp: "outerValue",
nestedObj: {
message: message,
prop1: "value1",
prop2: "value2"
}
};
};
const someApiCall = (callback) => {
setTimeout(callback(createData("test1")), 1000);
setTimeout(callback(createData("test2")), 2000);
setTimeout(callback(createData("hello world")), 5000);
};
someApiCall(callBackSpy);
expect(callBackSpy).toHaveBeenCalledWith(
jasmine.objectContaining({
nestedObj: {
prop1: "hello world"
}
})
);
});
});
但我不知道全部属性。所以,我只是在寻找一个特定的属性,如下所示
expect(callBackSpy).toHaveBeenCalledWith(
jasmine.objectContaining({
outerProp: "outerValue",
nestedObj: {
message: "hello world",
prop1: "value1",
prop2: "value2"
}
})
);
有没有办法通过部分匹配来实现这一点?您可以试试这个
expect(callBackSpy).toHaveBeenCalledWith(
jasmine.objectContaining({
nestedObj: {
message: "hello world"
}
})
);
另一种方法是从方法调用中提取参数,并测试特定的嵌套属性
expect(callBackSpy).toHaveBeenCalledWith(
jasmine.objectContaining({
nestedObj: jasmine.objectContaining({message: 'hello world'})
})
);
const arguments = callBackSpy.calls.argsFor(0);
expect(arguments[0]['nesedObject']['message'].toBe('hello world');