All Projects → nordcloud → Serverless Mocha Plugin

nordcloud / Serverless Mocha Plugin

Licence: mit
Plugin for Serverless Framework which adds support for test-driven development using Mocha

Programming Languages

javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to Serverless Mocha Plugin

Serverless Jest Plugin
Plugin for Serverless Framework which adds support for test-driven development using Jest
Stars: ✭ 111 (-26.97%)
Mutual labels:  serverless-framework, serverless-plugin, mocha, test-driven-development
Plugins
Serverless Plugins – Extend the Serverless Framework with these community driven plugins –
Stars: ✭ 850 (+459.21%)
Mutual labels:  serverless-framework, serverless-plugin
Serverless Appsync Plugin
serverless plugin for appsync
Stars: ✭ 804 (+428.95%)
Mutual labels:  serverless-framework, serverless-plugin
Serverless Reqvalidator Plugin
Serverless plugin to attach AWS API Gateway Basic Request Validation https://rafpe.ninja/2017/12/18/serverless-own-plugin-to-attach-aws-api-gateway-basic-request-validation/
Stars: ✭ 59 (-61.18%)
Mutual labels:  serverless-framework, serverless-plugin
Serverless Wsgi
Serverless plugin to deploy WSGI applications (Flask/Django/Pyramid etc.) and bundle Python packages
Stars: ✭ 377 (+148.03%)
Mutual labels:  serverless-framework, serverless-plugin
Serverless Plugin Typescript
Serverless plugin for zero-config Typescript support
Stars: ✭ 611 (+301.97%)
Mutual labels:  serverless-framework, serverless-plugin
Bombanauts
Bombanauts, inspired by the original Bomberman game, is a 3D multiplayer online battle arena (MOBA) game where players can throw bombs at each other, make boxes explode, and even other players!
Stars: ✭ 54 (-64.47%)
Mutual labels:  mocha, test-driven-development
serverless-plugin-epsagon
Epsagon's plugin for Serverless Framework ⚡️
Stars: ✭ 53 (-65.13%)
Mutual labels:  serverless-framework, serverless-plugin
Serverless Boilerplate
Serverless project template
Stars: ✭ 80 (-47.37%)
Mutual labels:  serverless-framework, mocha
Serverless Api Gateway Caching
A plugin for the Serverless framework which helps with configuring caching for API Gateway endpoints.
Stars: ✭ 92 (-39.47%)
Mutual labels:  serverless-framework, serverless-plugin
Serverless Sentry Plugin
This plugin adds automatic forwarding of errors and exceptions to Sentry (https://sentry.io) and Serverless (https://serverless.com)
Stars: ✭ 146 (-3.95%)
Mutual labels:  serverless-framework, serverless-plugin
Serverless Plugin Canary Deployments
Canary deployments for your Serverless application
Stars: ✭ 283 (+86.18%)
Mutual labels:  serverless-framework, serverless-plugin
serverless-rack
Serverless plugin to deploy Ruby Rack applications (Sinatra/Rails/Padrino/Cuba etc.) and bundle gems
Stars: ✭ 58 (-61.84%)
Mutual labels:  serverless-framework, serverless-plugin
Serverless Step Functions
AWS Step Functions plugin for Serverless Framework ⚡️
Stars: ✭ 758 (+398.68%)
Mutual labels:  serverless-framework, serverless-plugin
serverless-dynamodb-ttl
⚡️ Serverless Plugin to set DynamoDB TTL
Stars: ✭ 16 (-89.47%)
Mutual labels:  serverless-framework, serverless-plugin
Serverless Es Logs
A Serverless plugin to transport logs to ElasticSearch
Stars: ✭ 51 (-66.45%)
Mutual labels:  serverless-framework, serverless-plugin
serverless-api-gateway-throttling
A plugin for the Serverless framework which configures throttling for API Gateway endpoints.
Stars: ✭ 54 (-64.47%)
Mutual labels:  serverless-framework, serverless-plugin
serverless-package-external
Add external folders to the deploy package 📦
Stars: ✭ 53 (-65.13%)
Mutual labels:  serverless-framework, serverless-plugin
Serverless Plugin Git Variables
⚡️ Expose git variables to serverless
Stars: ✭ 75 (-50.66%)
Mutual labels:  serverless-framework, serverless-plugin
Serverless Kms Secrets
🔑🔐☁️ Serverless plugin to encrypt variables with KMS (DEPRECATED)
Stars: ✭ 116 (-23.68%)
Mutual labels:  serverless-framework, serverless-plugin

Serverless Mocha Plugin

Build Status

A Serverless Plugin for the Serverless Framework, which adds support for test driven development using mocha

THIS PLUGIN REQUIRES SERVERLESS V1!

More familiar with Jest? Use serverless-jest-plugin.

Introduction

This plugin does the following:

  • It provides commands to create and run tests manually
  • It provides a command to create a function, which automatically also creates a test

Installation

In your service root, run:

npm install --save-dev serverless-mocha-plugin

Add the plugin to serverless.yml:

plugins:
  - serverless-mocha-plugin

Usage

Creating functions

Functions (and associated tests) can be created using the command

sls create function -f functionName --handler handler

e.g.

sls create function -f myFunction --handler functions/myFunction/index.handler

creates a new function myFunction into serverless.yml with a code template for the handler in functions/myFunction/index.js and a Javascript function module.exports.handler as the entrypoint for the Lambda function. A test template is also created into test/myFunction.js. Optionally tests can be created to specific folder using --path or -p switch, e.g.

sls create function -f myFunction --handler functions/myFunction/index.handler --path tests

To create an http event for the lambda, add the --httpEvent parameter, i.e.

sls create function -f myFunction --handler functions/myFunction/index.handler --httpEvent "[httpVerb] [relativePath]"

e.g.

sls create function -f myFunction --handler functions/myFunction/index.handler --httpEvent "post myResource" --httpEvent "get myResource"

Creating tests

Functions can also be added manually using the mocha-create command

sls create test -f functionName

If you want to run the tests against the real Lambda functions, you can initLiveModule() instead of getWrapper(). You can also use --live flag and then you don't need to change your tests.

  let wrapped = mochaPlugin.initLiveModule('myLambdaFunctionName');

initLiveModule() and getWrapper() are helper methods to initialize lambda-wrapper, which is used under the hood. Both methods return wrapped function, which can be invoked with .run({}) method and takes event object as an argument.

Running tests

Tests can be run directly using the "invoke test" command. This also initializes the environment variables based on your serverless.yml file and the SERVERLESS_TEST_ROOT variable that defines the root for the code to be tested. If you're running the tests locally (rather than on live Lambdas, as described below), it will also set the IS_LOCAL to 'true' to match the behavior of sls invoke local.

sls invoke test [--stage stage] [--region region] [-t timeout] [-f function1] [-f function2] [...]

To use a mocha reporter (e.g. json), use the -R switch. Reporter options can be passed with the -O switch.

If no function names are passed to "invoke test", all tests are run from the test/ directory and subdirectories.

The default timeout for tests is 6 seconds. In case you need to apply a different timeout, that can be done in the test file using using .timeout(milliseconds) with the define, after, before or it -blocks. e.g.

  it('implement tests here', () => {
    ...
  }).timeout(xxx);

To run test in specific folder use --path or -p switch.

To run tests live against the actual deployed Lambdas, use the '--live' or '-l' switch. Please note that this will work only for tests created with module version 1.4 or higher.

To run tests e.g. against built artefacts that reside in some other directory, use the '--root' or '-r' switch. e.g.

  sls webpack -o testBuild
  sls invoke test --root testBuild
  rm -rf testBuild

Using own template for a test file

The templates to use for new function Files can be determined with the custom testTemplate configuration in serverless.yml

custom:
  serverless-mocha-plugin:
    testTemplate: templates/myTest.js

Currently, there are three variables available for use in the template:

  • functionName - name of the function
  • functionPath - path to the function
  • handlerName - the name of the handler function

If you'd like to get more information on the template engine, you check documentation of the EJS project.

Using own template for function file

The templates to use for new function Files can be determined with the custom functionTemplate configuration in serverless.yml

custom:
  serverless-mocha-plugin:
    functionTemplate: templates/myFunction.js

Running commands before / after tests

The plugin can be configured to run commands before / after the tests. This is done by setting preTestCommands and postTestCommands in the plugin configuration.

For example, start serverless-offline before tests and stop it after tests using the following configuration:

custom:
  serverless-mocha-plugin:
    preTestCommands: 
      - bash startOffline.sh
    postTestCommands:
      - bash stopOffline.sh

Sample startOffline.sh:

TMPFILE=/var/tmp/offline$$.log
if [ -f .offline.pid ]; then
    echo "Found file .offline.pid. Not starting."
    exit 1
fi

serverless offline 2>1 > $TMPFILE &
PID=$!
echo $PID > .offline.pid

while ! grep "server ready" $TMPFILE
do sleep 1; done

rm $TMPFILE

Note: The example relies on the output of the serverless offline command. If the start script is not working for you, replace "server ready" with the string serverless offline prints as soon as the server is ready and listening.

Sample stopOffline.sh

kill `cat .offline.pid`
rm .offline.pid

Usage with babel register

If you use mocha with babel compiler e.g. sls invoke test --compilers js:@babel/register
Babel configuration can be determined with the custom babelOptions configuration in serverless.yml

custom:
  serverless-mocha-plugin:
    babelOptions:
      presets: [["@babel/env", { "targets": { "node": "8.10" }, "shippedProposals": true, "useBuiltIns": "usage" }]]
      plugins:
        - ["@babel/plugin-transform-runtime"]

Release History (1.x)

  • 2019/11/xx - v1.12.0 - support for node12 fix --compiler option parsing
  • 2019/07/25 - v1.11.0 - support for node10 deprecated node6
  • 2019/04/02 - v1.10.0 - add timeout parameter add babel options
  • 2018/12/15 - v1.9.1 - fix to work with serverless 1.33 and later
  • 2018/09/16 - v1.9.0 - add support for --exit option
  • 2018/04/03 - v1.8.0 - add support for Node 8
  • 2017/09/10 - v1.7.0 - ability to run scripts before / after tests
  • 2017/09/09 - v1.6.0 - also run tests from subfolders of test
  • 2017/07/11 - v1.4.1 - Add option --root for running tests on e.g. webpack build results residing in other directories, add option --httpEvent to create http events when creating functions
  • 2017/07/09 - v1.4.0 - Add --live switch, add --grep switch, verify that the test runtime matches the service runtime, upgrade lambda-wrapper (returns exceptions as errors)
  • 2016/12/21 - v1.3.2 - Fix population of environment variables
  • 2016/11/28 - v1.3.1 - Added support for environment variables in Serverless 1.2
  • 2016/11/09 - v1.2.0 - Added ability to add function / test templates
  • 2016/11/09 - v1.1.0 - Added function create command.
  • 2016/09/23 - v1.0.2 - Bugfixes, configurable test timeouts
  • 2016/08/15 - v1.0.0 - Preliminary version for Serverless 1.0

License

Copyright (c) 2017 Nordcloud, licensed for users and contributors under MIT license. https://github.com/nordcloud/serverless-mocha-plugin/blob/master/LICENSE

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].