我可以在 Jest `.toHaveBeenCalledWith()` 块中使用 `expect.stringContaining()` 吗?

mik*_*ana 12 javascript testing jestjs

expect.stringContaining()是否可以在 Jest 块内使用.toHaveBeenCalledWith()

我目前正在使用:

expect(createChatRoomMock).toHaveBeenCalledWith({
  creatorId: expect.stringContaining("user_"),
  chatRoomUuid: expect.stringContaining("chatRoom_"),
});
Run Code Online (Sandbox Code Playgroud)

但这失败了:


    - Expected
    + Received


    Object {
  -   "chatRoomUuid": StringContaining "chatRoom_",
  -   "creatorId": StringContaining "user_",
  +   "chatRoomUuid": "chatRoom_sZ9nj4hC46e4bGz4PjYzpC",
  +   "creatorId": "user_nCQsasvYirUwwoEr3j8HsC",
    },
Run Code Online (Sandbox Code Playgroud)

这很奇怪,正如您从错误中看到的那样,收到的字符串与预期相匹配

我也尝试过:

expect(createChatRoomMock).toHaveBeenCalledWith({
  creatorId: expect.stringMatching(/user_.*/),
  chatRoomUuid: expect.stringMatching(/chatRoom_.*/),
});
Run Code Online (Sandbox Code Playgroud)

结果与上图相同。

如何expect.stringContaining()在 Jest.toHaveBeenCalledWith()块内使用?

mik*_*ana 10

这是玩笑中的一个错误。如果测试中有任何其他内容失败,Jest 会将这些显示为失败,即使它们会通过,例如:

  it.only("Test", () => {
    var createChatRoomMock = jest.fn();

    createChatRoomMock({
        "chatRoomUuid": "chatRoom_sZ9nj4hC46e4bGz4PjYzpC",
        "creatorId": "user_nCQsasvYirUwwoEr3j8HsC",
        "somethingElse": "bad"
    });

    expect(createChatRoomMock).toHaveBeenCalledWith({
      creatorId: expect.stringContaining("user_"),
      chatRoomUuid: expect.stringContaining("chatRoom_"),
      somethingElse: expect.stringContaining("good")
    });
  });
Run Code Online (Sandbox Code Playgroud)

将(不准确地)表明对方.toHaveBeenCalledWith()失败了:

    - Expected
    + Received

      Object {
    -   "chatRoomUuid": StringContaining "chatRoom_",
    -   "creatorId": StringContaining "user_",
    -   "somethingElse": StringContaining "good",
    +   "chatRoomUuid": "chatRoom_sZ9nj4hC46e4bGz4PjYzpC",
    +   "creatorId": "user_nCQsasvYirUwwoEr3j8HsC",
    +   "somethingElse": "bad",
      },
Run Code Online (Sandbox Code Playgroud)