NagRock / ts-mockito

Mocking library for TypeScript
MIT License
969 stars 93 forks source link

verify() is not able to verify arguments except for the last call #217

Open subodhkarwa opened 3 years ago

subodhkarwa commented 3 years ago

Description:

export enum Status {
    NEW = 'NEW',
    UPDATED = 'UPDATED',
    COMPLETED = 'COMPLETED'
}

export class Record {
    key: string;
    createdAt: Date;
    status: Status
}

  async saveRecord(record: Record): Promise<Record> {
    return this.put(record)
  };

Now, in my code , I have the something similar to:

 saveRecord(key: abc, status: Status.NEW)  
  ...
 saveRecord(key: abc, status: Status.UPDATED)

While in test, I am verifying using:

verify(mockRepository.saveRecord(objectContaining({abc, status: Status.NEW}))).once()     
verify(mockRepository.saveRecord(objectContaining({abc, status: Status.UPDATED}))).once()     

It doesn't work

while : verify(mockRepository.saveRecord( objectContaining({abc, status: Status.UPDATED}))).times(2) //does work I have debugged my current flow and I am sure, both the status updates are called ones

Sadly, mock is updated to capture arguments only for the last call, and all history before that is lost.

P.S: The record object in my implementation has some autogenerated fields, which is why I am using objectContaining()

Markus-Ende commented 2 years ago

You can use capture as a work-around.