首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sinon -如何存根验证库(Authy -Twilio)

Sinon -如何存根验证库(Authy -Twilio)
EN

Stack Overflow用户
提问于 2016-11-11 13:58:44
回答 1查看 324关注 0票数 0

我目前刚接触Sinon,Mocha,Supertest,并且正在编写测试。在我当前的场景中,我有一个验证库,它验证我的"OTP“,并在验证之后继续在回调函数中执行操作。

我无法模拟回调以返回null,并继续测试代码的其余部分。以下是我的代码片段:

代码语言:javascript
复制
Controller.js


var authy = require('authy')(sails.config.authy.token);
 authy.verify(req.param('aid'), req.param('oid'), function(err, response) {
  console.log(err);
  if (err) {
    return res.badRequest('verification failed.');
  }
....

我的测试是:

代码语言:javascript
复制
 var authy = require('authy')('token');



describe('Controller', function() {
  before(function() {
    var authyStub = sinon.stub(authy, 'verify');
    authyStub.callsArgWith(2, null, true);
  });

  it('creates a test user', function(done) {
    // This function will create a user again and again.
    this.timeout(15000);
    api.post('my_endpoint')
      .send({
        aid: 1,
        oid: 1
      })
      .expect(201, done);


  });
});

实际上,我想在回调中调用authy verify get a null作为"err“,这样我就可以测试其余的代码。

任何帮助都将不胜感激。谢谢

EN

回答 1

Stack Overflow用户

发布于 2016-11-11 16:25:26

问题在于,您在测试和代码中使用了authy对象的不同实例。看这里,authy github repo

在您的代码中,您需要

代码语言:javascript
复制
var authy = require('authy')(sails.config.authy.token);

在你的测试中

代码语言:javascript
复制
var authy = require('authy')('token');

因此,您的存根通常很好,但它永远不会像这样工作,因为您的代码不使用您的存根。

一种解决方法是允许从外部注入控制器中的authy实例。如下所示:

代码语言:javascript
复制
function Controller(authy) {
    // instantiate authy if no argument passed

在您的测试中,您可以这样做

代码语言:javascript
复制
describe('Controller', function() {
    before(function() {
        var authyStub = sinon.stub(authy, 'verify');
        authyStub.callsArgWith(2, null, true);
        // get a controller instance, however you do it
        // but pass in your stub explicitly
        ctrl = Controller(authyStub);
    });
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40541969

复制
相关文章

相似问题

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