好吧,我至少尝试了 50 次,但没有找到解决方案,请帮助我!当我通过 mongoose 连接到我的数据库时,当我使用 mocha 进行测试时,我没有实现回调触发。我不知道还要做什么。这是我的代码
数据库测试
'use strict'
const mocha = require('mocha')
const assert = require('chai').assert
const LisaClient = require('mongoose')
const Db = require('../')
require('babel-polyfill')
const fixtures = require('./fixtures')
describe('create database structure', function () {
let dbName
let db
before(function (done) {
dbName = `pos_lisa`
db = new Db({ db: dbName })
let urlConnection = `mongodb://localhost:27017/${dbName}`
LisaClient.connect(urlConnection, function (err) {
if (err) return console.log(err)
done()
})
})
it('create user', async function () {
let userModel = fixtures.getUser()
let result = await db.saveUser(dbName, userModel)
assert.typeOf(db.saveUser, 'function', 'saveUser is a function')
})
after(function (done) {
LisaClient.disconnect()
done()
})
})
这是回调不触发的行(db.js)
saveUser (dbName, userModel) {
console.log(LisaClient.connection.readyState)
if (LisaClient.connection.readyState !== 1) {
console.log('not connected')
} else {
LisaClient.connection.once('open', function () {
// this never fire
console.log('connected')
})
}
}
在此先感谢您的帮助
好的,所以你的问题的根源是你在事件发生很久之后绑定到“一次”事件。
换句话说,因为“创建用户”测试发生在连接成功之后(您在设置的回调中调用完成),您会错过“一次”事件。
我会将 'once' 事件放在 'before' 函数中。然后只在测试通过后迭代。
一个简化的例子是这样的:
test.js
'use strict'
const LisaClient = require('mongoose');
const Db = require('../')
const fixtures = require('./fixtures')
let dbName
let db
describe('create database structure', function () {
before(function (done) {
dbName = `pos_lisa`
db = new Db({ db: dbName })
const urlConnection = 'db_connection_string_here'
LisaClient.connect(urlConnection);
LisaClient.connection.once('open', function () {
console.log('connected')
done();
})
})
it('create user', function (done) {
let userModel = fixtures.getUser()
if (LisaClient.connection.readyState !== 1) {
console.log('not connected');
} else {
db.saveUser(dbName, userModel)
}
});
})
数据库.js
saveUser (dbName, userModel) {
if (LisaClient.connection.readyState !== 1) {
console.log('not connected');
} else {
var Kitten = LisaClient.model('Kitten', LisaClient.Schema({name: String}));
var kitten = new Kitten({name: 'Sprinkles'});
kitten.save(function(err, result){
//assert(!err)
//assert(result);
console.log(result);
done();
})
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句