aws-sdk-mockを使ってもS3(にアクセスするAWS SDK)がモックに挿し変わらずに困り果ててました・・。
明示的にaws-sdkのパスを指定することで解決しました。
jestのテストコード
const awsMocker = require('aws-sdk-mock');
// 【ここがポイント】 以下のようにaws-sdkのパスを明示的に指定する必要がありました。
const path = require('path');
awsMocker.setSDK(path.resolve('node_modules/aws-sdk'));
const testee = require('テスト対象ファイルへのパス');
// その他 略
describe('S3の画像保存テスト', () => {
describe('正常時', () => {
it('putObjectを1回だけ実行する', async done => {
let calledCount = 0;
awsMocker.mock('S3', 'putObject', (params, callback) => {
calledCount++;
callback(null, {
"ETag": "00000000000000000000000000000000"
});
});
await testee.putImage({ "filename": "test.txt", "file_base64": "YWJjZGVmZw==" });
expect(calledCount).toBe(1);
done();
});
});
});
おそらく、aws-sdkへのパスが明示的に指定されないと、aws-sdk-mockさんは差し替え対象のaws-sdkを正しく特定できないのでしょう。
その結果、本物のS3のSDKが動いてしまったのだと思います。
地味なところで時間を使ってしまったのでした・・。