ts-mockito icon indicating copy to clipboard operation
ts-mockito copied to clipboard

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

Open subodhkarwa opened this issue 3 years ago • 1 comments

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

subodhkarwa avatar Jul 05 '21 16:07 subodhkarwa

You can use capture as a work-around.

Markus-Ende avatar Sep 28 '21 11:09 Markus-Ende