2016-11-11 9 views
0

私は現在、Sinon、Mocha、Supertestの新機能であり、テストの作成プロセスも新しくなっています。私の現在のシナリオでは、私は自分の "OTP"を検証する認証ライブラリを持っており、それがコールバック関数内で操作を実行することを確認した後です。Sinon - 認証ライブラリをスタブする方法(Authy -Twilio)

私はnullを返し、残りのコードをテストするためにコールバックをモックすることができません。以下は、私のコードスニペットです:

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.'); 
    } 
.... 

私のテストは次のとおりです。

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); 


    }); 
}); 

私は基本的にコールバックに「ERR」としてnullを取得検証authyを呼びたいので、私は、コードの残りの部分をテストすることができます。

ご協力いただければ幸いです。 ありがとう

+0

@philnashを行うことができ、あなたのテストで

function Controller(authy) { // instantiate authy if no argument passed 

、あなたは –

答えて

0

問題は、テストとコードにauthyオブジェクトの異なるインスタンスを使用していることです。ここをクリックauthy github repoを参照してください。あなたは

var authy = require('authy')(sails.config.authy.token); 

し、テストに

var authy = require('authy')('token'); 

を行い、あなたのコードで

だからあなたのスタブは、一般的に細かいですが、あなたのコードは、あなたのスタブを使用していないので、それはこのように動作することはありません。

コントローラのauthyインスタンスを外部から注入できるようにすることです。このような何か:あなたは

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

おかげで返事を@nomve検証authyを模擬する方法を私に聞かせてくださいすることができます!私はしばらくこの頭を壊している。引数を "コントローラ"にどのように渡しますか?現在、私は例えば "作成"関数を呼び出しています。 module.exports {create:function(req、res、next){..... –

+0

あなたのcontroller.jsファイルの様子はわかりません。ただし、authyを使用しているコードの一部がどのようなものであれ、その中のスタブ付きインスタンスを渡す必要があります。それ以外の場合は、実際にそれをスタブすることはできません。 – nomve

関連する問題