Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 摩卡测试MongoDB:多个测试中的未捕获类型错误_Javascript_Node.js_Mongodb_Mocha.js - Fatal编程技术网

Javascript 摩卡测试MongoDB:多个测试中的未捕获类型错误

Javascript 摩卡测试MongoDB:多个测试中的未捕获类型错误,javascript,node.js,mongodb,mocha.js,Javascript,Node.js,Mongodb,Mocha.js,我已经写了一个测试,但它经常会产生一些不必要的类型错误。 我可以分别运行这两个测试。但当我同时运行两个测试时,就出现了问题。 为了重用连接,我编写了一个文件来连接Mongodb database.js var MongoClient = require('mongodb').MongoClient; var appDb = null; var url = 'mongodb://localhost:27017/theDB' exports.connectToServer = function(c

我已经写了一个测试,但它经常会产生一些不必要的类型错误。 我可以分别运行这两个测试。但当我同时运行两个测试时,就出现了问题。 为了重用连接,我编写了一个文件来连接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 但是,当我使用Mocha测试Mocha时,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();
       });
   });
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');

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();
    });

});
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();
});

我不知道怎样才能像你一样写出正确的测试,但我是这样写的:

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();
       });
   });
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');

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();
    });

});
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 one文件夹级别太高,因此test2.js中的appDb被设置为undefined,这不是一个函数,正如mocha在您尝试调用它之前告诉您的那样。

last};在test2.js中,为什么?@Sekai,对不起,这是一个打字错误。谢谢你的建议。看来我在理解胡克前后有些问题。