LoginSignup
4
7

More than 3 years have passed since last update.

aws-sdk-mockを使ってもS3がモックに差し替わらずに困りました

Last updated at Posted at 2020-04-25

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が動いてしまったのだと思います。

地味なところで時間を使ってしまったのでした・・。

4
7
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
7