如何集成测试nodeJS mongo

时间:2014-08-24 11:43:15

标签: node.js unit-testing mongoose

作为建立持续集成周期的一部分,我们为平均应用程序定义了单元和集成测试的标准模板。 一个基本测试是验证mongo集合中的一些设置(名称设置) 我们正在使用摩卡,应该,要求和超级测试

我已经定义了以下测试

  

var request = require('supertest');   描述( '配置',函数(){

before(function(done) {
    // In our tests we use the test db
    mongoose.connect(config.db);
    done();
});
describe('required configuration ',function(){
     it('should return Settings Object',function(done){
        mongoose.Setting.findOne({key:'ABC'}, function(foundSetting){
            foundSetting.value.should.equal('XYZ');
            done();
        });
    })

});
     

})

总是错误的'TypeError:无法调用方法'findOne'的未定义'

任何人都可以指出我正确的方向如何在mongo对象上使用集成测试(例如检查集合计数

2 个答案:

答案 0 :(得分:0)

考虑设置是一个猫鼬模型,你可以在模型文件的末尾

setting.js

...
module.exports = mongoose.model('Setting', settingSchema)

我想如果您在测试文件中需要这个模型,就像这样

test.js

var Setting = require('./setting')

然后你可以在实际测试用例中调用Setting.findOne而不是mongoose.Setting.findOne,它应该可以正常工作。此外,在执行此操作之前,应确保已成功连接到测试数据库。在挂钩之前清理测试集合是一个好习惯

before(function(done) {
    // Connect to database here

    Setting.remove({}, function(err) {
        if (err)
            throw err
        else
            done()
    })
})

并做同样的事情afterEach测试用例。

我不知道你在你的代码片段中使用supertest的位置和方式,但我相信它是正确的工具。同样,在你之前的钩子中你可以先调用request = request(require('./app')) app.js导出你的快递应用程序。此外,您可以将连接到数据库的代码移动到app.js,这感觉更像环境。

答案 1 :(得分:0)

在编写单元和集成测试之前,您应该安装必需的库

  1. 全局安装Mocha框架

    sudo npm install -g mocha
    
  2. 安装chai断言库和HTTP插件

    npm install chai
    npm install chai-http
    
  3. 将mocha命令添加到package.json文件

    "scripts": {
      "test": "mocha",
      "start": "nodemon app.js"
     }
    

在下面的代码中可以看到mocha框架和chai断言库的使用

const chai = require('chai');
const chaiHttp = require('chai-http');

chai.should();

chai.use(chaiHttp);

describe("Integration Test Case 1",() => {
it("Sign Up-In", () => {

    // Sign Up
    chai.request("localhost:5000/api/users")
        .post("/signup")
        .send(createdUser)
        .end(async (error, response) => {
            await response.should.have.status(201);

            // Sign In
            chai.request("localhost:5000/api/users")
                .get("/signin")
                .send(userCredential)
                .end(async (error, response) => {
                    await response.should.have.status(202);
}};