Testing Node.js从服务器获取数据以进行测试

Testing 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

我正在为服务器编写测试: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 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();
            });
        });