Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.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
Node.js 节点中的Mongodb测试_Node.js_Mongodb_Mocha.js - Fatal编程技术网

Node.js 节点中的Mongodb测试

Node.js 节点中的Mongodb测试,node.js,mongodb,mocha.js,Node.js,Mongodb,Mocha.js,我一直在Node中使用Mocha进行测试,因为它似乎是大多数人使用的。我还使用MongoDB来存储数据,因为我的服务器是一个简单的API服务器,所以我的所有方法都只是简单的数据库查询,我正试图用Mocha进行测试。 现在我面临的问题是(除了测试异步函数似乎很困难之外),我似乎找不到合适的方法来测试mongoDB Exception it('Should not create account', async (done) => { try { await createAcc

我一直在Node中使用Mocha进行测试,因为它似乎是大多数人使用的。我还使用MongoDB来存储数据,因为我的服务器是一个简单的API服务器,所以我的所有方法都只是简单的数据库查询,我正试图用Mocha进行测试。 现在我面临的问题是(除了测试异步函数似乎很困难之外),我似乎找不到合适的方法来测试mongoDB Exception

  it('Should not create account', async (done) => {
   try {
    await createAccountDB(user);
    await createAccountDB(user);
  } catch (err) {
    assert.notEqual(err, null);
    console.log(err);
  }
  finally {
    done();
  }
 });
});
我在这里尝试的是为用户创建一个帐户(基本上只是将对象保存到数据库中),然后再次创建相同的帐户,这将导致重复的密钥错误

现在,这不起作用,据我所知,这是因为我已经定义了async和done。我这样做的原因是,如果我不定义async,我将需要一大堆.then和.catch,这会使代码看起来很糟糕,但是如果我不在finally块中包含then done(),我的测试似乎永远都不会到达catch块


有没有办法在Mocha中编写这样的测试,而不会让代码看起来非常糟糕?

既然您已经在使用
async/await
模型,那么测试用例不一定需要
done
回调。当您有多个指示测试完成的方法时,mocha的某些版本会向您发出警告。试试这个:

it('should not create an account', async function() {
   try {
    await createAccountDB(user);
    await createAccountDB(user);
    throw new Error('Did not reject a duplicate account');
  } catch (err) {
    assert.notEqual(err, null);
    // any other assertions here
  }
});

try/catch
块中抛出的错误非常重要-如果没有它,即使没有抛出错误,测试仍然会通过。

非常感谢,这实际上修复了它,没有考虑在try块中抛出错误,非常聪明!