Mocha / SuperTest /请求交互不一致 - request.defaults不是函数

时间:2016-03-31 22:58:31

标签: node.js express request mocha supertest

这个让我难过。我使用mochajs作为NodeJS(Express 4)应用程序的测试套件。测试套件运行一系列mocha文件,所有这些都使用非常相似的设置,并且当单独运行时它们都运行正常 - 但是当作为套件运行时,一个文件突然失败并出现错误:

TypeError: request.defaults is not a function
    at Object.module.exports.apiName (/my/system/file/path/repo/lib/reports.js:176:30)

所有文件都用于工作,即使作为套件运行,但我们最近从使用转换为使用config.json文件作为使用process.env.NODE_ENV的环境决定因素 - 不确定它是否相关但是时机排队。

文件链的简化概述如下所示:

命令行电话:

env NODE_ENV=local mocha test

...运行file1,file2,file3等,直到:

测试/ reports.js

var env         = process.env.NODE_ENV,
    config      = require('../config.json');

// Libraries
var app         = require('../app'),        // Imports the application
    http        = require('http'),          // Sets up the test server on a different port
    assert      = require('assert'),        // Checks values against expected
    request     = require('supertest');     // Tests API Calls - https://www.npmjs.com/package/supertest

describe.skip('Reports', function() {
    before(function(){
        // Start APP and expose on a test different port
        this.server     = http.createServer(app).listen(3000);

        // Set request path to server - needs to match above
        request = request('http://localhost:3000');
    });

    describe('#NameOfAPI', function(){
        it('should return {status:"error"} if invalid report requested (Requires Mongo Running)', function(done) {
            this.slow(300);
            request
                .get('/app/reports/api/nameOfAPI?report=invalidReportName')
                .expect(200)
                .expect('Content-Type', /json/)
                .end(function(err, res){
                    it(res.body)
                    assert.equal(null, err);                                                    // Ensure no errors in request
                    assert.equal('error', res.body.status);                                     // Ensure correct status returned for invalid data
                    assert.notEqual(-1, res.body.messages[1].search(/empty response/i));        // Ensure proper message returned for invalid report
                    done();

                }); // End HTTP request for invalid report

        }); // End Test for invalid report
});

请求(通过supertest)显然调用路由(app / reports / api) - > API(nameOfAPI)模块:

LIB / reports.js

var env         = process.env.NODE_ENV,
    config      = require('../config.json'),
    request     = require('request');

var module.exports = {

    requestReportToCsv: function(report_name, hostname, cb){

        var req_limit   = 100;          // Set maximum concurrent requests - server returning numerous 'ECONNRESET' errors if hit too fast

        // Set HTTP request defaults outside of any loops
        // THIS IS THE LINE THAT'S FAILING - lib/reports.js:176:30
        var http_request = request.defaults({ json: true, pool: { maxSockets: req_limit } });

        if (env != 'prod') {
            http_request = http_request.defaults({headers: {'dev-cookie': 'on', 'Cookie':'dev_cookie=on'}});
        }

        http_request.post('https://website.com/api/info.php', {form: post_data}, function(err, resp, body){

             // Uncomment to see an example of the report response
             ...SO ON AND SO FORTH

我的生活中能否找出为什么request.defaults({})在使用env NODE_ENV=local mocha test/reports单独调用mocha测试文件时可以正常工作但在使用{{作为套件的一部分运行时失败} 1}}。有什么想法吗?

修改:注意,重命名env NODE_ENV=local mocha test变量var request = require('supertest')(以及所有后续引用)并没有效果,所以我不认为它是范围/变量/名称问题。

0 个答案:

没有答案