MongoClient没有在cucumberjs测试中返回数据

时间:2017-06-10 19:33:51

标签: javascript node.js mongodb cucumber

我已经采取了几种不同的方式。删除后发现查找,查找从未找到任何内容。如果我发表评论this.accounts.remove...,则查找有效。如果我将删除线留在那里,它就不会。我对cucumberjs,mongo客户端和节点的理解表明find应该有效。

我甚至尝试将删除/查找序列移动到自己的文件中,并在那里工作。似乎只有当我在黄瓜中运行它时,序列才会失败。我怀疑是因为黄瓜加载文件的方式,但我不确定。

有人可以帮我弄清楚如何让这个工作吗?

World.js:

var db = new Db('FlashCards', new Server('localhost', 27017));

db.open(function(err, opened) {
  if (err) {
    console.log("error opening: ", err);
    done(err);
  }
 db = opened;
});

var {
  defineSupportCode
} = require('cucumber');

function CustomWorld() {

  this.db = db;
 this.accounts = db.collection('accounts');

hooks.js:

Before(function(result, done) {
  //comment this out, and leave a done(), it works!!!!
  this.accounts.remove(function(error, result){
    if( error) {
      console.log("Error cleaning the database: ", error);
      done(error);
    }
    done();
  })
});

user_steps.js:

Then('I will be registered', function(done) {
  let world = this;
  this.accounts.find({
    username: world.user.username
  }).toArray(
    function(err, accounts) {
      if (err) {
        console.log("Error retrieveing data: ", err);
        done(err);
      }
      console.log("Accounts found: ", accounts);
      expect(accounts).to.be.ok;
      expect(accounts.length).to.be.equal(1);
      done();
   });
});

Inovcation:

cucumber-js --compiler es6:babel-core/register

2 个答案:

答案 0 :(得分:0)

您在删除方法中缺少要删除的项目。我假设要删除的项目是

this.accounts.remove(function(error,result){

答案 1 :(得分:0)

您缺少一个删除方法的参数。该参数是要删除的查询。我假设,删除查询是{username:world.user.username}

var qry = {username:world.user.username}; 请尝试以下内容:

Before(function(result, done) { //comment this out, and leave a done(), it works!!!!
    var qry={username: world.user.username};
     this.accounts.remove(qry, function(error, result){ 
     if( error) { 
               console.log("Error cleaning the database: ", error);
               done(error);
       } 
      done(); 
       }) });