“once('open')”中的回调不会在猫鼬中触发

毛奥利西奥

好吧,我至少尝试了 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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Node.js:mongoose.once('open')不执行回调函数

来自分类Dev

猫鼬事件不会在连接上触发

来自分类Dev

为什么 open() 系统调用不会在 Ubuntu 中打开交换文件?

来自分类Dev

`xdg-open` 不会在首选应用程序中打开文件

来自分类Dev

Python 3.7.4 函数 open() 不会在 pycharm 中打开文件

来自分类Dev

FactoryBot不会在特征中触发回调

来自分类Dev

CLLocationManager不会在委托中回调方法

来自分类Dev

猫鼬不会在数组的objectid中填充objectid

来自分类Dev

猫鼬查询中的回调数据

来自分类Dev

didSelectRowAtIndexPath不会在ViewController中触发

来自分类Dev

onCreateView 不会在 Fragment 中触发

来自分类Dev

“hashchange”不会在 Wordpress 中触发

来自分类Dev

addValueChangeListener 不会在 android 中触发

来自分类Dev

OnGetMarkText 不会在 TContourSeries 中触发

来自分类Dev

表中的jQuery行不会在回调函数中删除

来自分类Dev

AWSCognito Auth `getSession` 不会在 Swift 中触发回调

来自分类Dev

Angular $ scope将不会在Bootbox回调中更新

来自分类Dev

如何从猫鼬查询回调中访问特定值?

来自分类Dev

猫鼬-向回调中返回的对象添加方法

来自分类Dev

在NodeJS cronjob中未调用猫鼬查询回调

来自分类Dev

导出在异步回调中可用的猫鼬连接?

来自分类Dev

不会在弹出窗口中触发chrome.tabs.create的回调吗?

来自分类Dev

PhoneGap不会在401错误上触发错误回调

来自分类Dev

卸载应用不会在服务中触发onDestroy

来自分类Dev

鼠标滚轮事件不会在Chrome中触发

来自分类Dev

异步断言不会在Scalatest中触发

来自分类Dev

动作不会在React + Redux中触发reducer

来自分类Dev

加载的事件不会在UserControl中触发

来自分类Dev

滚动事件不会在Sencha Touch中触发

Related 相关文章

热门标签

归档