Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Tests do not load .env or serverless.yml variables #51

Open
Steffan-Carlos opened this issue Oct 26, 2019 · 8 comments
Open

Tests do not load .env or serverless.yml variables #51

Steffan-Carlos opened this issue Oct 26, 2019 · 8 comments

Comments

@Steffan-Carlos
Copy link

Steffan-Carlos commented Oct 26, 2019

On newest release when running npm test which runs serverless-bundle test environment variables from serverless.yml

provider:
  name: aws
  runtime: nodejs10.x
  stage: dev
  region: us-east-1
  environment:
    TEST: "value"

or from .env file

TEST=value

This issue was noticed in the serverless-bundle package and noted by @Vadorequest
AnomalyInnovations/serverless-bundle#4

Using his solution I was able to load .env variables by adding the following to the package.json

"jest": {
    "setupFilesAfterEnv": [
      "./jest-preload-env.js"
    ]
  }

jest-preload-env.js

require('dotenv').config({
    path: './.env'
});

if (process.env.NODE_ENV !== 'test') {
    throw Error('Non-test environment');
}

severless-bundle test should load serverless.yml environment variables

@jayair
Copy link
Member

jayair commented Oct 26, 2019

Oh good catch. Yeah I'll have a look at how to do this in the serverless-bundle plugin.

@Steffan-Carlos
Copy link
Author

@jayair Any update on this issue?

@jayair
Copy link
Member

jayair commented Jan 2, 2020

Yeah I just pushed a beta version. Give it a try!

@jeff-kilbride
Copy link

Environment variables are working for me in tests, but the sample docs are a bit confusing. In the sample serverless.yml file, you have:

  #environment:
  #  sampleEnvVar: ${env:SAMPLE_ENV_VAR}

with the following in the env.example file:

SAMPLE_ENV_VAR=i-am-an-environment-variable

This leads to a mismatched environment between the code and the tests. In the code, the given environment variable is accessed under process.env.sampleEnvVar. However, the tests seem to be reading directly from the .env file. So, it seems the tests are expecting this variable under process.env.SAMPLE_ENV_VAR. To get it to work correctly, I had to change the format of my environment variables to make them consistent.

To avoid this confusion, I think the samples should be changed to be consistent also. The sample variable should either be sampleEnvVar or SAMPLE_ENV_VAR in both the .env file and the serverless.yml file.

Hope this makes sense... :)

@jayair
Copy link
Member

jayair commented Feb 23, 2020

@jeff-kilbride Good catch, let me update the sample in the comment.

@Steffan-Carlos
Copy link
Author

looks good to me

@kevinkoste
Copy link

kevinkoste commented Jun 4, 2020

I'm coming across an issue using the same three serverless plugins as serverless-nodejs-starter. My project uses env vars defined in the serverless.yml based on custom serverless variables, like so:

# serverless.yml

provider:
  environment:
    USERS_TABLE_NAME: ${self:custom.usersTableName}

custom:
  stage: ${opt:stage, self:provider.stage}
  usersTableName: ${self:custom.stage}-myproject-users
// handler that is being tested

dynamoDb.put({
  TableName: process.env.USERS_TABLE_NAME,
  Item: {... }
})

Ideally, 'serverless-bundle test' would use env vars defined in serverless.yml instead of the .env file itself. Thanks for any ideas - could be missing something basic here.

@jayair
Copy link
Member

jayair commented Jun 13, 2020

Hmm it doesn't right now. That's because the .env file is treated as the environment variables of the execution context, while the ones in the serverless.yml are the ones that are set in the Lambda function when it's deployed.

It's actually a little tricky to do this because serverelss-bundle test is running the tests agains the bundled code and not against what Serverless Framework creates.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants