Jasmine 如何匹配传递给toHaveBeenCalledWith的部分嵌套属性?

Jasmine 如何匹配传递给toHaveBeenCalledWith的部分嵌套属性?,jasmine,Jasmine,我在一个回调函数上创建了一个spy,每次都会使用不同的参数调用多次。该参数是一个复杂的嵌套对象。我正在寻找具有特定属性的对象 如果我像下面那样指定所有属性,它就可以工作 describe("Test", function() { it("should pass", function() { const callback = (data) => {}; const callBackSpy = jasmine.createSpy().and.callFake(callba

我在一个回调函数上创建了一个spy,每次都会使用不同的参数调用多次。该参数是一个复杂的嵌套对象。我正在寻找具有特定属性的对象

如果我像下面那样指定所有属性,它就可以工作

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');