[英]Mocha test cases throw error as "is not a function" for loaded module when run all test cases together
我正在使用 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
但是,當我分別運行每個測試用例文件時,它可以完美地運行文件。
配置文件.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();
});
});
});
});
文檔操作.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);
}
});
}
};
我對運行一個測試文件和同時運行所有測試文件時的行為差異感到驚訝和困惑。
請幫忙。
我在發布這個問題后才發現問題。 在閱讀這篇文章時,我意識到“Server”模塊正在加載“DocumentOperation.js 模塊,DocumentOperation.js 也在加載 Server.js 模塊。由於循環性質,我認為它會產生問題。當我刪除未使用的“Server.js”時來自“DocumentOperation.js”然后它起作用了:-)有時只是記錄問題也有幫助!!!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.