mysql - 测试将数据保存在数据库中

标签 mysql node.js mocha.js sinon chai

您好,我正在尝试运行 mocha 和 chai 测试来测试我的 Node js 路由器,它将用户保存在 mysql 数据库中,然后返回相同的数组。

我现在面临的问题是,当我从本地运行它时,我不想将信息保存在数据库中,当我使用像 travis/Ci 这样的持续集成软件时,测试失败,因为没有数据库联系。我想知道如何在不实际保存到数据库的情况下测试当前保存的数据库。

基本上意味着有一个假的虚拟数据库来保存或返回保存。

我读到 sinon.js 可以提供帮助,但我不太确定如何使用它。

这是我的代码

var expect = require('chai').expect;
var faker = require('faker');
const request = require('supertest');
const should = require('should');
const sinon = require('sinon');
const helper = require('../../models/user');

describe('POST /saveUser',()=>{
    it('should save a new user',(done)=>{
        var fake =
        request(app)
            .post('/saveUser')
            .send({
                Owner : faker.random.number(),
                firstname : faker.name.firstName(),
                lastname : faker.name.lastName(),
                email:faker.internet.email(),
                password : faker.random.number(),
                token : faker.random.uuid()
            })
            .expect(200)
            .expect((res)=>{
                expect(res.body.firstname).to.be.a("string");
                expect(res.body.lastname).to.be.a("string");
                expect(res.body.Owner).to.be.a("number");
            })
            .end(done);
    });
});

这是路由器

router.post('/saveUser',(req,res,next)=>{
   saveUser(req.body).then((result)=>{
        return res.send(req.body);
    }).catch((e)=>{
       return res.send('All info not saved');
   });
});

这是模型

saveUser = (userinfo) => new Promise((resolve,reject)=>{
    db.query('INSERT INTO user SET ?',userinfo,function(error,results,fields){
        if(error){
            reject();
        }else{
            resolve(userinfo);
        }
    })
});

最佳答案

您所描述的是 stub 。使用 sinon,您可以 stub 方法并调用假方法,而不是像这样:

sinon.stub(/* module that implements saveUser */, 'saveUser').callsFake(() => Promise.resolve());

关于mysql - 测试将数据保存在数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46254176/

相关文章:

node.js - Mocha 单元测试 Mongoose 模型

python - Django - 将 ForeignKey 关系更改为 OneToOne

powershell - 如何让 Mocha 的 Unicode 输出在 Windows 控制台中正确显示?

javascript - Mocha 客户端可以运行为 Cucumber/Gherkin 编写的测试吗?

javascript - 如何使用 browsermob-proxy 和 nightwatch.js 监控 HTTP 调用?

javascript - 获取 Node webkit中目录的完整路径

node.js - Mongoose 连接 mLab 时出现连接错误

mysql - 如果在 TRUNCATE 和 SELECT INTO 之间发送查询,则没有数据。使用 MySQL 数据库

Mysql 撤销root用户的权限

php - 如何选择与用户的好友关系中未批准的 "User"用户名?