【问题标题】:Jest's expect.objectContaining() fails in expect.toHaveBennCalled()开玩笑 expect.objectContaining() 在 expect.toHaveBeenCalled() 中失败
【发布时间】:2020-02-08 21:32:00
【问题描述】:

我正在尝试编写一个测试来验证使用 aws-sdk 写入 DynamoDB 的代码。尽管官方文档 (https://jestjs.io/docs/en/expect#expectobjectcontainingobject) 中提出了一个非常相似的用例,但我的断言失败了。任何帮助表示赞赏。

这是我的测试:

test("givenCprRepositoryServiceTestSuite_whenSaveCprRecord_thenMetaExpiresAtAppended", async () => {
        await cprRepositoryService.saveCprRecord({cprNumber: existingCpr, firstName: "Jens", lastName: "Jensen"})

        expect(aws.DynamoDB.DocumentClient.prototype.put).toHaveBeenCalledWith(
            expect.objectContaining({
                Item: {
                    metaExpiresAt: expect.any(Number)
                }
            }))
    })

而返回的错误是:

错误: expect(jest.fn()).toHaveBeenCalledWith(...expected)

预期的对象包含:

{"Item": {"metaExpiresAt": Any<Number>}}

收到:

{"Item": {"cprNumber": "1234567890", "firstName": "Jens", "lastName": "Jensen", "metaExpiresAt": 1570792526}, "TableName": "CountryLayer_Cpr"}

【问题讨论】:

    标签: javascript node.js typescript jestjs aws-sdk


    【解决方案1】:

    expect.objectContaining(object) 方法无法处理嵌套对象。为了解决这个问题,我建议对您的代码进行以下修改。

    test("givenCprRepositoryServiceTestSuite_whenSaveCprRecord_thenMetaExpiresAtAppended", async () => {
            await cprRepositoryService.saveCprRecord({cprNumber: existingCpr, firstName: "Jens", lastName: "Jensen"})
    
            expect(aws.DynamoDB.DocumentClient.prototype.put).toHaveBeenCalledWith(
                expect.objectContaining({
                    Item: expect.objectContaining({
                        metaExpiresAt: expect.any(Number)
                    })
                }))
        })
    

    【讨论】:

      猜你喜欢
      • 2018-02-13
      • 1970-01-01
      • 2017-11-19
      • 1970-01-01
      • 2018-07-20
      • 2020-10-08
      • 2021-06-26
      • 2020-08-19
      • 2021-05-02
      相关资源
      最近更新 更多