Reputation: 71
I am trying to write the unit test case using jest and nest but getting the below error: In the test case, I am trying to call create credentials method using spyon function but the spyon is itself giving me an error.
DeviceSecretService › should call createCredentials method with expected parms
Cannot spyOn on a primitive value; undefined given
23 | // });
24 | it('should call createCredentials method with expected parms', async () => {
> 25 | const createCredentialsSpy = jest.spyOn(service, 'createCredentials');
| ^
26 | const deviceId = 'deviceId';
27 | const dci = new DeviceCommunicationInterface();
at Object.<anonymous> (device/services/device-secret/device-secret.service.spec.ts:25:39)
Test Suites: 1 failed, 1 total
Tests: 1 failed, 1 total
Snapshots: 0 total
Time: 20.61 s, estimated 76 s
Ran all test suites matching /device-secret.service.spec.ts/i.
npm ERR! Test failed. See above for more details.
Below is the code for the spec.ts file
it('should call createCredentials method with expected parms', async () => {
const createCredentialsSpy = jest.spyOn(service, 'createCredentials');
const deviceId = 'deviceId';
const dci = new DeviceCommunicationInterface();
service.createCredentials(deviceId,dci);
expect(createCredentialsSpy).toHaveBeenCalledWith(deviceId,dci);
});
});
I tried everything please give some suggestion
Upvotes: 7
Views: 25778
Reputation: 70221
You're not providing a mock value for SecretManagerServiceClient
, so Nest won't be able to create the DeviceSecretService
, as a result of which you pass undefined
to the jest.spyOn
method.
To fix this,you need to provide some sort of custom provider as a mock for the injected service. Possibly something like
{
provide: SecretManagerServiceClient,
useValue: {
getProjectId: jest.fn(),
createSecret: jest.fn(),
}
}
You'll obviously want to provide better definitions, but this should be a starting point to keep going.
Upvotes: 2