3

現在、.NET を使用して記述されたサーバー側コードの単体テストをいくつか書いていnodejsます。

今、カスタムモジュールが他のモジュール、私のもの、またはnodejs標準ライブラリからのものを使用している状況があり、それらをモックしたかったのです。まず、いくつかの既存のソリューションをグーグルで検索しました。たとえば、https://github.com/thlorenz/proxyquirehttps://github.com/mfncooper/mockeryを見つけました。

しかし、今日は単純なアプローチを使用して、次のようなことを試みました。moduleUnderTest

var fs = require('fs');
exports.foo = function(){
  console.log("===foo===");
  fs.read();
}

およびファイルmoduleUnderTestSpec:

var fs = require('fs');
var moduleUnderTests = require('../server/moduleUnderTests.js');

fs.read = function(){
  console.log("===read===");
}

実行すると、次のgrunt jasmine_nodeことがわかります。

===foo===
===read===

したがって、この単純なケースでは、モジュール内の関数の 1 つを別の関数と交換できfsます。私のアプローチがうまくいかない状況はありますか?

4

2 に答える 2

2

あなたのアプローチは問題ありませんが、モジュールがオブジェクトをエクスポートする場合にのみ機能します。モジュールが関数をエクスポートする場合 (これは頻繁に発生します)、またはその他のものをモックすることはできません。つまり、モジュール オブジェクトのプロパティのみをモックできますが、オブジェクト全体はモックできません。

于 2013-11-13T11:20:23.500 に答える