Skip to content
/ tester Public

A test management framework for Nxus applications

License

Notifications You must be signed in to change notification settings

nxus/tester

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

35 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

nxus-tester

Build Status

A test management framework for Nxus applications. The tester module provides some helper functions for funtionally testing a Nxus app.

Installation

> npm install nxus-tester --save-dev

Configuration

You will want to use mocha as your test runner in your application project, here's a standard npm test script for your package.json

"test": "NODE_ENV=test mocha --recursive --compilers js:babel-register -R spec modules/test/*",

Usage

Test Server startup

Any test suites that want to make requests to a running instance of your application should use startTestServer:

describe("My App", function() {
    before(function() {
        this.timeout(4000) // Depending on your apps startup speed
        startTestServer()
    })
    ... // Your tests
})

This is safe to call in multiple suites, only one test server will be started. You may pass an object as an optional second argument to startTestServer for command ENV variables, such as DEBUG or overriding test database names.

Running tests

> npm test

Requests

Requests to the test server can be made using helper methods for the requests-with-promises library.

import {request, requestRaw, requestLogin} from 'nxus-tester'

request returns the body of a successful response

let body = await request.get('/') // or request({url: '/', ...})
res.statusCode.should.equal(200)

or errors with a non-2XX response

let body = await request.get('/notHere')
 .catch(request.errors.StatusCodeError, (err) => {...})

requestRaw returns the response object, if you want to check statusCode, headers, etc let res = await requestRaw.get({url: '/admin', followRedirect: false}) res.statusCode.should.equal(302) res.headers.location.should.contain('/login')

requestLogin`` creates a new cookie jar and logs in as the requested username/password and returns a request object to use likerequest`. let req = await requestLogin('user@dev', 'test') let body = await req.get({url: '/admin'})

Fixtures

You can define fixtures (json or csv files with data to load during test startup) manually in your application modules: app.get('tester').fixture('modelName', 'path/to/fixture.json')

Or by creating a top-level application fixtures directory with files named for the models they contain fixture data for.

Use models and nxus modules in tests

The test server is started in the same process as your tests, so you may use e.g. storage.getModel() in your before() and test methods to create test data and assert that requests modify data.

API


fixture

Import a data file as fixture data for tests. Only runs if config.env==test

Parameters

  • modelId string The identity of the model to import
  • path string The path to a file
  • options object Options to pass to data-loader.importFile

startTestServer

Start a test server in the test process on port 3002

Parameters

  • script string The entrypoint filename relative to cwd (optional, default "index.js")
  • env (optional, default {})
  • options object additional ENV variables (override test database names, etc)

Returns Promise resolves when application has started

About

A test management framework for Nxus applications

Resources

License

Stars

Watchers

Forks

Packages

No packages published