1 |
|
2 |
|
3 | const _ = require('lodash');
|
4 |
|
5 | const url = require('url');
|
6 |
|
7 | const app = require('../../app');
|
8 |
|
9 |
|
10 | const 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 |
|
34 | const 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 |
|
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 |
|
75 | module.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 |
|
84 | module.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 |
|
94 | module.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 | };
|