A test management framework for Nxus applications. The tester module provides some helper functions for funtionally testing a Nxus app.
> npm install nxus-tester --save-dev
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/*",
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.
> npm test
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 like
request`.
let req = await requestLogin('user@dev', 'test')
let body = await req.get({url: '/admin'})
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.
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.
Import a data file as fixture data for tests. Only runs if config.env==test
Parameters
modelId
string The identity of the model to importpath
string The path to a fileoptions
object Options to pass to data-loader.importFile
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