私は機能としてエクスポートされたサービスモジュールを持っています。私は構成オブジェクトのように、この構造を保持する必要があるので、その中にいくつかのものを渡す必要があります。私はサービスから機能を抜き出すことを試みているが、それを理解することはできない。私のアプリでは、テスト中に問題のあるAPIコールを作成する機能があるので、スタブしたいと思います。上記sinonを使用して関数としてエクスポートされたノードモジュールの関数/プロパティをモックするにはどうすればよいですか?
// myService.js
module.exports = function(config) {
function foo() {
returns 'bar';
}
return {
foo: foo
};
};
// test.js
var config = require('../../config');
var request = require('supertest');
var chai = require('chai');
var expect = chai.expect;
var sinon = require('sinon');
var myService = require('./myService.js')(config);
describe('Simple test', function(done) {
it('should expect "something else", function(done) {
var stub = sinon.stub(myService, 'foo').returns('something else');
request(server) // this object is passed into my test. I'm using Express
.get('/testRoute')
.expect(200)
.expect(function(res) {
expect(res.body).to.equal('something else');
stub.restore();
})
.end(done);
});
});
* /testRoute I set up as a simple GET route that simply returns the value from myService.foo()
(私は非同期問題を処理するために、異なる私のテストを書く必要があるだろう理解)が動作していない、と私はそれが私のサービスをエクスポートしている方法としなければならないと考えています。私が以下のようにサービスを書くと、スタブは正常に動作します。
module.exports = {
test: function() {
return 'something';
}
};
また、モジュールに情報を渡す必要があるため、モジュールを上記の元の構造に保ちたいと思います。そのようにエクスポートするモジュールから関数をスタブする方法はありますか?私はプロキシクエストについても調べていましたが、それが答えなのかどうかはわかりません。
ありがとう、それは意味があります。私はTDDに潜入しようとしているし、より良い習慣を構築しようとしており、これは確かに役立つでしょう。私はあなたが提案したように静的に関数を公開します。 スタブを掃除して頂き、ありがとうございました。私は、私がクリーンアップするために実行しているafterEachを行う:)私は私の質問にそれを含める必要がありましたね! – ahnkee
それがあなたのために働く場合私の答えを受け入れることを考慮してください – CaptEmulation
ちょうど。私の前のコメントを終わらせる途中でした:p – ahnkee