Build a basic framework for functional testing

This commit is contained in:
Rowan Manning
2013-11-20 16:14:21 +00:00
parent 9d72e50b4e
commit 623a52e112
9 changed files with 143 additions and 5 deletions

View File

@@ -0,0 +1,44 @@
'use strict';
var jsdom = require('jsdom');
var request = require('request');
module.exports = createNavigator;
// Create a navigate function
function createNavigator (baseUrl, store) {
return function (opts, callback) {
store.body = null;
store.dom = null;
store.request = null;
store.response = null;
store.status = null;
store.window = null;
request({
url: baseUrl + opts.endpoint,
method: opts.method || 'GET',
body: opts.body,
json: true,
qs: opts.query
}, function (err, res, body) {
store.body = body;
store.request = res.request;
store.response = res;
store.status = res.statusCode;
jsdom.env(
store.body,
function (err, window) {
store.window = window;
store.dom = window.document;
callback();
}
);
});
};
}

31
test/functional/index.js Normal file
View File

@@ -0,0 +1,31 @@
/* global beforeEach, describe, it */
/* jshint maxlen: 200, maxstatements: 20 */
'use strict';
var assert = require('proclaim');
describe('GET /', function () {
describe('with no query', function () {
beforeEach(function (done) {
var req = {
method: 'GET',
endpoint: '/'
};
this.navigate(req, done);
});
it('should send a 200 status', function () {
assert.strictEqual(this.last.status, 200);
});
it('should have an "Add new URL" button', function () {
var elem = this.last.dom.querySelectorAll('[data-test=add-task]');
assert.strictEqual(elem.length, 1);
assert.strictEqual(elem[0].getAttribute('href'), '/new');
});
});
});

26
test/functional/setup.js Normal file
View File

@@ -0,0 +1,26 @@
/* global before */
/* jshint maxlen: 200 */
'use strict';
var config = require('../../config/test.json');
var createNavigator = require('./helper/navigate');
var request = require('request');
// Run before all tests
before(function (done) {
this.baseUrl = 'http://localhost:' + config.port;
this.last = {};
this.navigate = createNavigator(this.baseUrl, this.last);
assertTestAppIsRunning(this.baseUrl, done);
});
// Check that the test application is running, and exit if not
function assertTestAppIsRunning (url, done) {
request(url, function (err) {
if (err) {
console.error('Error: Test app not started; run with `grunt start-test`');
process.exit(1);
}
done();
});
}