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"}
1 Answer
Reset to default 20The 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)
})
}))
})