所以,我正在尝试运行Mocha测试,更准确地说是Chakram测试。 问题是,我从MongoDB中的集合中获取数据,我想将这些数据存储在全局变量中以运行一些测试。 问题是在回调中我得到了数据,但它没有设置全局变量来运行测试。
这是代码
var chakram = require('chakram'),
expect = chakram.expect;
describe("Test", function() {
var gl_email;
var gl_token;
before("Getting user data", function() {
var setAccessData = function() {
var MongoClient = require('mongodb').MongoClient;
MongoClient.connect('mongodb://localhost/virtusapp', function(err, db) {
if (err) throw err;
console.log("Connected to Database");
var user = db.collection('users').findOne({
name: "virtus-app"
});
user.then(function(result) {
email = result.email;
token = result.token1 + result.token2;
db.close(test(email, token))
});
});
}
var test = function(email, token) {
gl_email = email;
gl_token = token;
//Here the email and token are set, but it doesnt set the global variables
}
setAccessData();
});
it("should have set global email variable", function() {
//here gl_email should be set, but I get UNDEFINED.
expect(gl_email).to.eql("virtus-app@virtus.ufcg.edu.br");
})
});
我认为问题不在于Chakram,因为我还没有在这段代码中使用过。
答案 0 :(得分:1)
您的before
函数是异步的。您应该使用不同的签名来告诉mocha
它必须等到它完成才能运行测试。
before("Getting user data", function(done) {
...
var test = function(email, token) {
gl_email = email;
gl_token = token;
done();
}
...
});
只有在调用done()
之后,其余的代码才会被mocha执行。
Mocha docs提供了有关如何测试异步代码https://mochajs.org/#asynchronous-code
的非常全面的指南