最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Jest's expect.objectContaining() fails in expect.toHaveBennCalled() - Stack Overflow

programmeradmin3浏览0评论

I'm trying to write a test to vlaidate code that writes to DynamoDB with aws-sdk. Despite a very similar use case being presented in the offical docs (), my assertion fails. Any help appreciated.

This is my test:

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)
                }
            }))
    })

And the error returned is:

Error: expect(jest.fn()).toHaveBeenCalledWith(...expected)

Expected ObjectContaining:

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

Received:

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

I'm trying to write a test to vlaidate code that writes to DynamoDB with aws-sdk. Despite a very similar use case being presented in the offical docs (https://jestjs.io/docs/en/expect#expectobjectcontainingobject), my assertion fails. Any help appreciated.

This is my test:

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)
                }
            }))
    })

And the error returned is:

Error: expect(jest.fn()).toHaveBeenCalledWith(...expected)

Expected ObjectContaining:

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

Received:

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

Share Improve this question edited Mar 22, 2023 at 16:31 AncientSwordRage 7,61521 gold badges99 silver badges190 bronze badges asked Oct 11, 2019 at 10:59 Marek WysockiMarek Wysocki 1311 gold badge1 silver badge3 bronze badges
Add a comment  | 

1 Answer 1

Reset to default 20

The expect.objectContaining(object) method cannot handle nested objects. To resolve this problem, I'd recommend the following modifications to your code.

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)
                })
            }))
    })
发布评论

评论列表(0)

  1. 暂无评论