【问题标题】:Testing saves data in database测试将数据保存在数据库中
【发布时间】:2017-09-16 12:58:29
【问题描述】:

您好,我正在尝试运行 mocha 和 chai test 来测试我的节点 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);
        }
    })
});

【问题讨论】:

    标签: mysql node.js mocha.js sinon chai


    【解决方案1】:

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

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

    【讨论】:

    • 抱歉回复晚了,实现 saveUser 的模块是什么意思,能否请您在评论中使用我的代码,我是新手,很难理解。
    • 您的 saveUser 方法是在某个文件中实现的,我猜是在模型/用户中?您必须在该文件中导出 saveUser ,然后您可以存根: sinon.stub(helper, 'saveUser')
    • 所以基本上像这样 const {saveUser} = require('../../models/user'); sinon.stub(saveUser, 'saveUser').callsFake(() => Promise.resolve());
    • const helper = require('../../models/user'); sinon.stub(helper, 'saveUser').callsFake(() => Promise.resolve()); stub 的第一个参数是对象,第二个参数是属性,在本例中是函数名。
    • 明天会试试这个,让你知道,在芬兰已经很晚了 :D 谢谢你的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    相关资源
    最近更新 更多