Testing Node.js从服务器获取数据以进行测试
我正在为服务器编写测试:test.jsTesting Node.js从服务器获取数据以进行测试,testing,Testing,我正在为服务器编写测试:test.js var config = require('../rest_server/config/config.js').test; var port = 2000; // Alternatively config.port var app = require('../rest_server/app.js')(config); var assert = require('assert'); var http = require('http'); function d
var config = require('../rest_server/config/config.js').test;
var port = 2000; // Alternatively config.port
var app = require('../rest_server/app.js')(config);
var assert = require('assert');
var http = require('http');
function defaultDatabaseOptions(method, path) {
var options = {
host: config.db.host,
port: config.db.port,
path: path,
method: method,
agent: false,
headers: {
Cookie: null
}
};
return options;
}
function defaultServerOptions(method, path) {
var options = {
host: config.server.host,
port: config.server.port,
path: path,
method: method,
agent: false,
headers: {
Cookie: null
}
};
return options;
}
describe('app', function () {
describe('#start()', function () {
// Start server
before (function (done) {
app.start();
done();
});
// Shut down server
after (function (done) {
app.close();
done();
});
// 2. Check whether the data server got match with data sent from embeddedJS
it('retrieve data should match with what embeddedJS send', function (done) {
var headers = defaultServerOptions('GET', '/data/1');
http.get (headers, function (res) {
console.log(res);
assert.equal(res.body, null, 'Data get by rest server should be the same as send by embeddedJS');
done();
});
});
});
现在我需要获取get方法中使用的一个值,它位于另一个文件router/data.js中,如下所示:
var path = require('path')
var log = require(path.join(__dirname, '..', 'utils', 'log.js'))
var validator = require('is-my-json-valid')
var lzstring = require('lz-string')
module.exports = function (config, app, db, passport) {
var logger = log(config)
// Returns data points for a site/page/component in a time period
app.get('/data/:website_id/:page_id?/:component_id?', function (req, res) {
logger("GET /data/:website_id/:page_id?/:component_id?");
// Use `data` table
var data = db.use('data')
data.fetch({}, {limit: 5}, function (err, body, header) {
if (err) {
console.log('[data.fetch] ', err.message);
return;
}
var data_array = []
for (row in body.rows) {
data_array.push(body.rows[row].doc);
}
var data_points = { "data": data_array };
res.status(200).json(data_points);
});
});
app.post('/data', function (req, res) {
logger("POST /data");
request_json = req.body
// Verify JSON
var validate = validator({
type: 'object',
properties: {
data: {
required: true,
type: 'string'
},
session_key: {
required: true,
type: 'string'
},
url: {
required: true,
type: 'string'
},
domain: {
required: true,
type: 'string'
},
}
})
logger("POST /data : Validating...")
request_valid = validate(request_json)
if (!request_valid) {
return res.status(500).json({ 'error': 'Invalid JSON' })
}
// De-compress
logger("POST /data : Decompressing...")
decompressed_string
= lzstring.decompressFromEncodedURIComponent(request_json.data)
logger("POST /data : Parsing...")
datapoint_array = JSON.parse(decompressed_string).config
var data = db.use('data')
processed_count = 0
for (i=0;i < datapoint_array.length; i++) {
data.insert(datapoint_array[i], {}, function(err, body) {
if (err) {
logger("ERROR: " + err.message);
}
processed_count++;
if (processed_count == datapoint_array.length) {
return res.status(200).json({ 'done': true })
}
});
}
});
}
I console.log res,但它不包含我发送的任何数据点
it('retrieve data should match with what embeddedJS send', function (done) {
var headers = defaultServerOptions('GET', '/data/1');
http.get (headers, function (res) {
console.log(res);
assert.equal(res.body, null, 'Data get by rest server should be the same as send by embeddedJS');
done();
});
});