mirror of
https://github.com/zhigang1992/interfake.git
synced 2026-04-29 04:25:17 +08:00
Support for delaying responses a random amount within a specified range
This commit is contained in:
@@ -2,6 +2,7 @@ var express = require('express');
|
||||
var path = require('path');
|
||||
var FluentInterface = require('./fluent');
|
||||
var corsMiddleware = require('./cors');
|
||||
var _toString = Object.prototype.toString;
|
||||
|
||||
function createInvalidDataException(data) {
|
||||
return new Error('You have to provide a JSON object with the following structure: \n' + JSON.stringify({ request : { method : '[GET|PUT|POST|DELETE]', url : '(relative URL e.g. /hello)' }, response : { code : '(HTTP Response code e.g. 200/400/500)', body : '(a JSON object)' } }, null, 4) + ' but you provided: \n' + JSON.stringify(data, null, 4));
|
||||
@@ -63,6 +64,20 @@ function Interfake(o) {
|
||||
app.routes[request.method][i][property] = value;
|
||||
}
|
||||
|
||||
function determineDelay(delayInput) {
|
||||
var result = 0, range, upper, lower;
|
||||
if(_toString.call(delayInput) === '[object Number]') {
|
||||
result = delayInput;
|
||||
} else if(_toString.call(delayInput) === '[object String]') {
|
||||
range = /([0-9]+)..([0-9]+)/.exec(delayInput);
|
||||
upper = +range[2];
|
||||
lower = +range[1];
|
||||
result = Math.floor( Math.random() * (upper - lower + 1) + lower );
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
function createRoute(data) {
|
||||
var specifiedRequest, specifiedResponse, afterSpecifiedResponse;
|
||||
if (!data.request || !data.request.method || !data.request.url || !data.response || !data.response.code) {
|
||||
@@ -85,9 +100,10 @@ function Interfake(o) {
|
||||
app[specifiedRequest.method](specifiedRequest.url, function (req, res) {
|
||||
var specifiedResponse = req.route.responseData;
|
||||
var afterSpecifiedResponse = req.route.afterResponseData;
|
||||
var responseDelay = specifiedResponse.delay || 0;
|
||||
var responseDelay = determineDelay(specifiedResponse.delay);
|
||||
|
||||
debug(req.method, 'request to', req.url, 'returning', specifiedResponse.code);
|
||||
debug(req.method, 'request to', req.url, 'will be delayed by', responseDelay, 'millis');
|
||||
// debug('After response is', afterSpecifiedResponse);
|
||||
|
||||
var responseBody = specifiedResponse.body;
|
||||
|
||||
@@ -283,6 +283,38 @@ describe('Interfake JavaScript API', function () {
|
||||
done();
|
||||
});
|
||||
});
|
||||
it('should create one GET endpoint with support for delaying the response with a delay range', function (done) {
|
||||
var interfake = new Interfake();
|
||||
var enoughTimeHasPassed = false;
|
||||
var _this = this;
|
||||
this.slow(500)
|
||||
interfake.createRoute({
|
||||
request: {
|
||||
url: '/test',
|
||||
method: 'get'
|
||||
},
|
||||
response: {
|
||||
code: 200,
|
||||
delay: "20..50",
|
||||
body: {
|
||||
hi: 'there'
|
||||
}
|
||||
}
|
||||
});
|
||||
interfake.listen(3000);
|
||||
timer = setTimeout(function() {
|
||||
enoughTimeHasPassed = true;
|
||||
}, 20)
|
||||
request({ url : 'http://localhost:3000/test', json : true }, function (error, response, body) {
|
||||
assert.equal(response.statusCode, 200);
|
||||
assert.equal(body.hi, 'there');
|
||||
interfake.stop();
|
||||
if(!enoughTimeHasPassed) {
|
||||
throw new Error('Response wasn\'t delay for long enough');
|
||||
}
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
// Testing the fluent interface
|
||||
@@ -480,6 +512,25 @@ describe('Interfake JavaScript API', function () {
|
||||
enoughTimeHasPassed = true;
|
||||
}, 50)
|
||||
|
||||
request.post({ url : 'http://localhost:3000/fluent', json : true }, function (error, response, body) {
|
||||
interfake.stop();
|
||||
if(!enoughTimeHasPassed) {
|
||||
throw new Error('Response wasn\'t delay for long enough');
|
||||
}
|
||||
done();
|
||||
});
|
||||
});
|
||||
it('should create one POST endpoint with a delay range', function (done) {
|
||||
var interfake = new Interfake();
|
||||
var enoughTimeHasPassed = false;
|
||||
var _this = this;
|
||||
this.slow(500)
|
||||
interfake.post('/fluent').delay("20..50");
|
||||
interfake.listen(3000);
|
||||
setTimeout(function() {
|
||||
enoughTimeHasPassed = true;
|
||||
}, 20)
|
||||
|
||||
request.post({ url : 'http://localhost:3000/fluent', json : true }, function (error, response, body) {
|
||||
interfake.stop();
|
||||
if(!enoughTimeHasPassed) {
|
||||
|
||||
Reference in New Issue
Block a user