4

私は最近ノードプロジェクトを開始し、テスト駆動開発者として、新しいモジュールで依存性注入の問題にすぐに遭遇しました。これが、依存性注入を行うべきだと私が考えた方法です。私がBDDフレームワークとして誓約を使用していることに注意し、それをSinonで拡張することが重要です。

私のモジュール:

exports.myMethod = function () {
  var crypto = exports.cryptoLib || require('ezcrypto').Crypto;
  crypto.HMAC(
    crypto.SHA256,
    'I want to encrypt this',
    'with this very tasty salt'
  );
};

私のテスト:

var vows = require('vows'),
  sinon = require('sinon');

vows.describe('myObject').addBatch({
  'myMethod':{
    'topic':true,
    'calls ezcrypto.HMAC':function () {
      var myObject = require('../playground.js');
      var mock = sinon.mock(require('ezcrypto').Crypto);

      myObject.cryptoLib = mock;
      myObject.cryptoLib.HMAC = mock.expects("HMAC").once().withExactArgs(
        require('ezcrypto').Crypto.SHA256,
        'I want to encrypt this',
        'with this very tasty salt'
      );
      myObject.cryptoLib.SHA256 = require('ezcrypto').Crypto.SHA256;
      myObject.cryptoLib = mock;
      myObject.myMethod();
      mock.verify();
    }
  }
}).export(module);

これが正しい道だと思いますか?モジュールを使用するときに(requireステートメントの後に「()」を追加するなど)それ以上必要ないので、このソリューションが好きです。

4

1 に答える 1

3

テスト用のものでコードを破棄するのは良い方法ではありません。コードの 2 行目

var crypto = exports.cryptoLib || require('ezcrypto').Crypto;

不要なインターフェースのように見えます。と交換することをお勧めします

var crypto = require('ezcrypto').Crypto;

ずっときれい。テストでは、「ezcrypto」モジュールの Crypto メソッドをモックするだけです。使用後は元に戻すことを忘れないでください。

于 2012-03-20T10:16:02.850 に答える