作为建立持续集成周期的一部分,我们为平均应用程序定义了单元和集成测试的标准模板。 一个基本测试是验证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对象上使用集成测试(例如检查集合计数
答案 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)
在编写单元和集成测试之前,您应该安装必需的库
全局安装Mocha框架
sudo npm install -g mocha
安装chai断言库和HTTP插件
npm install chai
npm install chai-http
将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);
}};