Mocha测试MongoDB:在多次测试中出现未捕获的TypeError

Mocha test MongoDB: Uncaught TypeError in multiple test

本文关键字:测试 TypeError MongoDB Mocha      更新时间:2023-10-27

我写了一个测试,但它总是产生Uncaught TypeError。我可以分别进行这两项测试。但当我同时运行两个测试时,就会出现问题。为了重用连接,我编写了一个文件来连接Mongodb

database.js

var MongoClient = require('mongodb').MongoClient;
var appDb = null;
var url = 'mongodb://localhost:27017/theDB'
exports.connectToServer = function(callback) {
     MongoClient.connect(url, function(err, db) {
            if(err) console.log(err);
            appDb = db;
            callback();
      });
 };
 exports.getDb = function() {
      if(typeof appDb !== 'undefined') {
             return appDb;
       }
 };

然后在同一目录中有两个测试,/test但当我通过捆绑摩卡来测试摩卡时,test1运行良好,但test2不会运行。上面写着:

1) Project test suite 'before all' hook:
   Uncaught TypeError: undefined is not a function

test1.js

var appDb = require('./database');
var Q = require('q');
var EnquiryForm = require('../EnquiryForm');
var EnquiryFormReset = require('../EnquiryFormReset');
var should = require('should');
describe('EnquiryForm', function() {
      before(function(done) {
            appDb.connectToServer(done);
      });
      describe('.getValue(key)', function() {
            it('should get Key', function() {
               // test using promise;
            })
       });
       after(function() {
             var reset = new EnquiryFormReset();
             reset.reset();
       });
   });

test2.js

var appDb = require('../database');
var Q = require('q');
var Project = require('../routes/models/Project');
var Clear = require('./MongoScripts/Clear');
var should = require('should');
describe('Project test suite', function() {
    before('project before', function(done) {
        appDb.connectToServer(done);
    });
    describe('.createProject(project), .getProjectById(id)', function() {
        it('can use the createProject to create and getProjectById to find by id.', function() {
        //   another test
        })
    });
    after('project after', function() {
        var clear = new Clear();
        clear.clear();
    });
});

我不知道如何像你一样正确地编写测试,但我是这样写的:

test1.js

var appDb = require('./database');
var Q = require('q');
var EnquiryForm = require('../EnquiryForm');
var EnquiryFormReset = require('../EnquiryFormReset');
var should = require('should');
require("mocha-as-promised")(); //important
suite('EnquiryForm')
before(function(done) {
    appDb.connectToServer(done);
});
test('should get Key', function() {
   // test using promise;
})
after(function() {
     var reset = new EnquiryFormReset();
     reset.reset();
});

test2.js

var appDb = require('../database');
var Q = require('q');
var Project = require('../routes/models/Project');
var Clear = require('./MongoScripts/Clear');
var should = require('should');
suite('Project test suite');
before('project before', function(done) {
    appDb.connectToServer(done);
});
test('can use the createProject to create and getProjectById to find by id.', function(done) {
//   another test
})
after('project after', function() {
    var clear = new Clear();
    clear.clear();
});

你可以试试,我希望这能帮助你

我还没有运行您的代码,所以不能确定,但问题似乎出在test2.js 中的require语句上

var appDb = require('../database');

您正在查找/database一个文件夹级别过高,因此test2.js中的appDb被设置为undefined,这不是一个函数,正如mocha在before()中尝试调用它时告诉您的那样。