dwyl / aws-sdk-mock

:rainbow: AWSomocks for Javascript/Node.js aws-sdk tested, documented & maintained. Contributions welcome!
Apache License 2.0
1.11k stars 109 forks source link

Crashes When Creating S3 - Profile default not found #212

Open petermetz opened 4 years ago

petermetz commented 4 years ago

The code:

  const AWSMock = require('aws-sdk-mock');
  const AWS = require('aws-sdk');
  AWSMock.setSDKInstance(AWS);
  AWS.config.update({ region: 'ap-southeast-2' });
  AWSMock.mock('S3', 'getObject', { 'Body': Buffer.from('somestring') });
  AWSMock.mock('S3', 'putObject', { 'Body': Buffer.from('somestring') });

  const s3Config = { apiVersion: '2006-03-01' };

   // it crashes here
  const s3 = new AWS.S3(s3Config);

The stack trace:

Error: Profile default not found
    at SharedIniFileCredentials.load (/***REDACTED***/node_modules/aws-sdk/lib/credentials/shared_ini_file_credentials.js:101:11)
    at SharedIniFileCredentials.coalesceRefresh (/***REDACTED***/node_modules/aws-sdk/lib/credentials.js:205:12)
    at SharedIniFileCredentials.refresh (/***REDACTED***/node_modules/aws-sdk/lib/credentials/shared_ini_file_credentials.js:168:10)
    at SharedIniFileCredentials.get (/***REDACTED***/node_modules/aws-sdk/lib/credentials.js:122:12)
    at new SharedIniFileCredentials (/***REDACTED***/node_modules/aws-sdk/lib/credentials/shared_ini_file_credentials.js:87:10)
    at AWS.CredentialProviderChain.defaultProviders (/***REDACTED***/node_modules/aws-sdk/lib/node_loader.js:64:24)
    at resolveNext (/***REDACTED***/node_modules/aws-sdk/lib/credentials/credential_provider_chain.js:119:28)
    at /***REDACTED***/node_modules/aws-sdk/lib/credentials/credential_provider_chain.js:126:13
    at /***REDACTED***/node_modules/aws-sdk/lib/credentials.js:124:23
    at EnvironmentCredentials.refresh (/***REDACTED***/node_modules/aws-sdk/lib/credentials/environment_credentials.js:78:9)
nelsonic commented 4 years ago

@petermetz please ensure you have the AWS credentials defined for the user. Does creating an S3 object work from your localhost without the mock?

petermetz commented 4 years ago

@nelsonic Ohh! The reason I wanted the mock was because I want my unit tests to run without me having to manage AWS credentials.

Is running without credentials maybe a feature on the road map or would you consider adding it? Thanks for the great library either way.

otkach-yara commented 3 years ago

if anyone interested, way to mock it using only jest

jest.mock('aws-sdk', () => {
  return {
    S3: jest.fn(() => ({
      getObject: jest.fn(() => ({ promise: () => ({ Body: fs.readFileSync('path to file') }) })),
    })),
  };
});