【问题标题】:Mocha test cases throw error as "is not a function" for loaded module when run all test cases together当一起运行所有测试用例时,Mocha 测试用例将错误作为已加载模块的“不是函数”抛出
【发布时间】:2016-05-01 19:18:11
【问题描述】:

我正在使用 mocha 为我的 nodejs 代码运行单元测试用例。但是,当我发现其中一个模块在一起运行所有测试用例时没有加载其依赖模块时,我感到很惊讶,但是当我单独运行这些测试文件时它工作得非常好。我确实探索了每个文件,但为什么当我尝试运行所有测试文件时它会产生问题?以下是详细信息。

Server.js(这是有问题的文件)

var constants = require("./../utilities/Constants");
var log = require('./../utilities/Logger');
var validator = require('validator');
var Utilities = require('./../../common/Utilities');
var documentOperationModule = require('./../persistence/DocumentOperation');

module.exports = {
    loadAppConfig: function (callback) {              
        //load application config from database and export as module.
        documentOperationModule.getAllDocuments(constants.APPLICATION_CONFIG_COLLECTION, "_id", -1, function (err, appConfigs) {
            if (!err) {
                global.appConfig = appConfigs[0];
                callback();
            }
            else
            {
                callback(new Error("Unable to load app config data error " + err));
            }
        });
    }
};

同时运行所有测试用例会引发以下错误

TypeError: documentOperationModule.getAllDocuments is not a function

但是,当我单独运行每个测试用例文件时,它可以完美地运行文件。

Profile.test.js

var expect = require('chai').expect;
var sinon = require('sinon');
var Utilities = require('app-root-path').require('/src/common/Utilities');
var Workout = require('app-root-path').require('/src/server/modules/Workout');
var UnitTestUtils = require('app-root-path').require('/src-test/unit/utils/UnitTestUtils');
var constants = require('app-root-path').require('/src/server/utilities/Constants');
var Server = require('app-root-path').require('/src/server/modules/Server');
//Test suit for getUserSchedule()
describe("getUserSchedule()", function () {

    it("should  get user schedule", function (done) {        
        var userId = "sddfgsdgf";        
        //load global config first
        Server.loadAppConfig(function () {
            expect(global.appConfig.defaultroutine).to.be.not.undefined;
            //generate user schedule
            Workout.getUserSchedule(userId, function (err, schedule) {
                expect(schedule.sequences[0]).to.include("w");
                //exit from test
                done();
            });
        });
    });
});

DocumentOperation.js

//Load database connection
var DBModule = require('./../persistence/DBModule.js');
var constants = require("./../utilities/Constants");
var AppUtilities = require('./../utilities/AppUtilities');
var Server = require('./../modules/Server');
var Utilities = require('./../../common/Utilities');
var log = require('./../utilities/Logger');
var Crypto = require('./../modules/Crypto');
module.exports = {

 // Get all docuemnts for given collection.
    getAllDocuments: function (collection, sortby, order, callback) {
        //If sortby is not given then use _id as sort order
        if (Utilities.isEmpty(sortby)) {
            sortby = "_id";
        }
        //If order direction is not given then use old item to display first 
        if (Utilities.isEmpty(order)) {
            order = -1; //note, -1 means to display old item at last and +1 means to display old item at top
        } else {
            order = parseInt(order);
        }
        log.debug({collection: collection}, "Finally doing sort by " + sortby + " and order as " + order);
        var sortObj = {};
        sortObj[sortby] = order;
        //Filter deleted document if any
        DBModule.db.collection(collection).find({isDeleted: {$ne: true}}, {password: 0, temppassword: 0}).sort(sortObj).toArray(function (err, docuemnts) {

            if (!err) {
                /callback(null, docuemnts);

            } else {
                callback(err, null);
            }
        });
    }

};

我对运行一个测试文件和同时运行所有测试文件时的行为差异感到惊讶和困惑。

请帮忙。

【问题讨论】:

    标签: node.js unit-testing mocha.js


    【解决方案1】:

    我在发布这个问题后就发现了问题。在阅读帖子时,我意识到“Server”模块正在加载“DocumentOperation.js 模块,而 DocumentOperation.js 也在加载 Server.js 模块。由于循环性质,我相信它会产生问题。当我删除未使用的“Server.js”时来自“DocumentOperation.js”然后它起作用了:-)有时只是记录问题也有帮助!!!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-08
      • 1970-01-01
      • 1970-01-01
      • 2014-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多