次のように、GCP Secret Manager からシークレットを取得しようとしています。
import { SecretManagerServiceClient } from '@google-cloud/secret-manager';
const getSecrets = async (storeId) => {
try {
const client = new SecretManagerServiceClient();
const [accessReponse] = await client.accessSecretVersion({
name: `projects/messaging-service-dev-b4f0/secrets/STORE_${storeId}_MESSANGER_CHANNEL_TOKEN/versions/latest`,
});
const responsePayload = accessReponse.payload.data.toString();
return responsePayload;
} catch (error) {
console.error(`getSecretInfo: ${error.message}`);
throw error;
}
};
export default getSecrets;
この関数の場合、ユニットを書くには、関数をモックする必要があるSecretManagerServiceClient
ためaccessSecretVersion
、このために書いたコードをフォローアップします。
import { SecretManagerServiceClient } from '@google-cloud/secret-manager';
import { mocked } from 'ts-jest/utils';
import getSecrets from './../get-secrets';
jest.mock('@google-cloud/secret-manager');
const mockAccessSecretVersion = jest.fn().mockReturnValue({
promise: jest.fn().mockResolvedValue({
accessReponse: {
payload: {
data: 'secret'
}
}
})
})
describe('getSecrets', () => {
beforeEach(() => {
jest.clearAllMocks();
console.error = jest.fn();
});
it('should console log correct message if token exist on global', async () => {
const mock = mocked(await (new SecretManagerServiceClient()).accessSecretVersion);
mock.mockImplementationOnce(() => 'sa')
const factory = await getSecrets('1');
jest.spyOn(global.console, 'error');
});
});
ここで、テストは次のように壊れていますTypeError: (intermediate value) is not iterable
。私はここで完全にブロックされており、このアプローチがモックを解決するためのリードです