UNPKG

2.25 kBJavaScriptView Raw
1
2
3const _ = require('lodash');
4
5const url = require('url');
6
7const app = require('../../app');
8
9//
10const mockRequest = function(options) {
11 const req = {};
12
13 req.hostname = 'test';
14 req.method = options.method || 'GET';
15 req.url = options.url;
16 req.originalUrl = options.url;
17 req.path = url.parse(options.url).pathname;
18 req.query = options.query || require('querystring').parse(options.url.split('?')[1]);
19 req.params = options.params || {};
20 req.cookies = options.cookies || {};
21 req.session = options.session || {};
22 req.body = options.body || {};
23 req.headers = options.headers || {};
24 req.files = options.files || {};
25 req.resume = function() {};
26 req.listeners = function() { return [] };
27 req.unpipe = function() {};
28 req.connection = {};
29
30 return req;
31};
32
33//
34const mockResponse = function(callback, req) {
35
36 const res = {
37 headers: {},
38 _headers: {},
39 _headerNames: {},
40 locals: {
41 flash: {}
42 }
43 };
44
45 res.getHeader = function(name) {
46 return res.headers[name];
47 };
48
49 res.setHeader = function(name, value) {
50 res.headers[name] = value;
51 };
52
53 // http hack
54 http.OutgoingMessage.prototype.setHeader = res.setHeader;
55
56 res.redirect = function(statusCode, redirectUrl) {
57 if (!_.isInteger(statusCode)) {
58 redirectUrl = statusCode;
59 statusCode = 302;
60 }
61 res.statusCode = statusCode;
62 res.redirectUrl = redirectUrl;
63 callback(null, res, req);
64 };
65
66 res.send = function(data) {
67 res.body = data;
68 callback(null, res, req);
69 }
70
71 return res;
72};
73
74//
75module.exports.send = function(url, options, callback) {
76 options.url = url;
77 const req = mockRequest(options);
78 const res = mockResponse(callback, req);
79
80 app.handle(req, res);
81};
82
83//
84module.exports.get = function(url, options, callback) {
85 if (_.isFunction(options)) {
86 callback = options;
87 options = {};
88 }
89 options.method = 'GET';
90 module.exports.send(url, options, callback);
91};
92
93//
94module.exports.post = function(url, options, callback) {
95 if (_.isFunction(options)) {
96 callback = options;
97 options = {};
98 }
99 options.method = 'POST';
100 module.exports.send(url, options, callback);
101};