在使用Mocha进行测试之前清除集合

时间:2018-05-19 19:00:11

标签: node.js unit-testing mongoose mocha chai

我正在使用Mocha,Chai和Mongoose为我的Node.js应用编写单元测试。如果集合是空的(根据需要),测试本身也可以工作,但是在测试之前我无法清除集合。

let mongoose = require("mongoose");
let Subject = require('../Subject/subject');

//Require the dev-dependencies
let chai = require('chai');
let chaiHttp = require('chai-http');
// let server = require('../server');
let server = "http://localhost:3000"
let should = chai.should();

chai.use(chaiHttp);

describe('subjects', () => {
  before((done) => { //Before each test, empty the database
    Subject.remove({})
    done();         
  });

  describe('/GET subject', () => {
    // working test
  });

  describe('/POST subject', () => {
    // working test
  });

  describe('/GET subject', () => {
    // working test
  });
});

我也尝试了

的变体
Subject.deleteMany({}, (err) => console.log(err));

Subject.find({}, (subject)=>{
   subject.remove({}).exec()
})

在前面的区块内无济于事。为了以防万一,我也尝试过删除前块之外的删除。如果我console.log(Subject.remove({}))我得到了Subject对象,那么它就可以访问它,只是实际上没有做任何永久性的对象。

我现在已经在这几个小时了,并且还没有更接近找出它,所以所有的帮助都表示赞赏。

2 个答案:

答案 0 :(得分:2)

尝试等待删除调用的回调,如此

before((done) => { //Before each test, empty the database
 Subject.remove({}, done);
});

答案 1 :(得分:0)

由于Mocha和Mognoose都支持异步块的承诺,因此可以无缝使用它们,而不是直接调用{ "id": "10", "selected": true, "other": "set" } 。在这种情况下,应该返回一个承诺:

#!/usr/bin/env python3

import math

import numpy as np
import seaborn as sn
from matplotlib.colors import LogNorm

data = np.random.rand(20, 20)

log_norm = LogNorm(vmin=data.min().min(), vmax=data.max().max())
cbar_ticks = [math.pow(10, i) for i in range(math.floor(math.log10(data.min().min())), 1+math.ceil(math.log10(data.max().max())))]

sn.heatmap(
    data,
    norm=log_norm,
    cbar_kws={"ticks": cbar_ticks}
)