首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Sinon中使用Chai-HTTP?

如何在Sinon中使用Chai-HTTP?
EN

Stack Overflow用户
提问于 2017-10-24 13:47:48
回答 1查看 503关注 0票数 2

下面是我想要测试的路由:

代码语言:javascript
复制
app.post('/api/user', (req, res) => {

        dbService.replaceUserOnDuplicate(req.body, function returnResponse(insertedId) {
            if (insertedId === 0 || insertedId === req.body.id) {
                return res.sendStatus(200);                            
            }
            // TODO_MINH: Send an appropriate error to handle by the front-end
            return res.send({});
        });
    });

我可以使用chai-http来做这样的事情(psuedo-code):

代码语言:javascript
复制
it('test', function (done) {
            chai.request(server)
                .post('/api/user')
                .send({ user: SomeUserObject })
                .end(function (err, res) {
                    res.should.have.status(200);
                    done();
                });

        });

但是,api/用户路由进行数据库调用。我如何使用sinon来存根此方法(replaceUserOnDuplicate),以便它返回一个虚拟响应(如0或任何值)?

有可能吗?我正在研究Chai-HTTP语法,我没有看到插入任何Sinon存根方法的空间。

作为参考,这里是dbService (mySQL node.js):

代码语言:javascript
复制
replaceUserOnDuplicate: function(user, callback) {
        this.tryConnect().getConnection(function(err, con) {
            var sql = queries.ReplaceUserOnDuplicate;
            // Insert parameters
            con.query(sql, [user.id, user.googleID, user.gender, user.firstName, user.lastName, user.email, user.isProfileSetUp, user.location, user.phoneNumber,
                 // On Duplicate Key Update parameters
                 user.googleID, user.gender, user.firstName, user.lastName, user.email, user.isProfileSetUp, user.location, user.phoneNumber], 
                 function (err, result) {
                con.release();
                if (err) throw err;
                return callback(result.insertId);
            });
        });
    },

谢谢你的帮忙!

EN

回答 1

Stack Overflow用户

发布于 2017-10-25 01:21:27

一种可能的解决方案是:如果我使用中间件将req.db的属性设置为我们的dbService对象,那么我可以通过使用.send()向它们发送参数来依赖注入chai-http内的dbService调用。我相信.send()是可以链接的。

这是有效的吗?

示例(中间件):

代码语言:javascript
复制
var exposeDb = function(req, resp, next){
    req.dbService= dbService;
    next();
  };

  app.use('/api/user', exposeDb, next);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46903023

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档