NodeJSコアからfsでreadFileSyncをスタブすることができないようです。次のコードは問題を特定します。以下にモカの結果を介してテストを実行する:Proxyquire:スタブできませんfs.readFileSync
> mocha tests/test.js
Some description
1) "before all" hook
0 passing (15ms)
1 failing
1) Some description "before all" hook:
TypeError: Cannot read property 'charCodeAt' of undefined
at Object.stripBOM (internal/module.js:48:14)
at Object.require.extensions.(anonymous function) (node_modules/proxyquire/lib/proxyquire.js:276:43)
at Proxyquire._withoutCache (node_modules/proxyquire/lib/proxyquire.js:179:12)
at Proxyquire.load (node_modules/proxyquire/lib/proxyquire.js:136:15)
at Context.<anonymous> (tests/test.js:12:15)
はここでテスト/ test.js
var proxyquire = require('proxyquire'),
sinon = require('sinon'),
fs = require('fs'),
sut;
describe('Some description', function() {
var readFileSyncStub;
before(function() {
readFileSyncStub = sinon.stub(fs, 'readFileSync');
readFileSyncStub.withArgs('someFile.js', { encoding: 'utf8' }).returns('some text');
sut = proxyquire('../sut', { fs: { readFileSync: readFileSyncStub } }); // Exception encountered somewhere in here ...
});
after(function() {
fs.readFileSync.restore(); // This is executed ...
});
it('Some it', function() {
// This never happens ...
});
});
だし、ここで、モジュールがテストされているsut.js、です:
var fs = require('fs'); // The code in this file is never executed ...
module.exports = function() {
return fs.readFileSync('someFile.js', { encoding: 'utf8' });
};
プロジェクトのフォルダ構造は次のとおりです。
./sut.js
./package.json
./tests/test.js
プロンプトから
mocha tests/test.js
を実行すると、
test.jsを実行できます。
私は数年前、Githubに似たようなことが報告されていたことに気がつきましたが、同じ問題か別の問題かは分かりません。ここにリンクがあります:それは助け
https://github.com/thlorenz/proxyquire/issues/12
場合、これらは私のpackage.jsonファイルで依存関係があります。私はproxyquireの依存関係に似たようなバージョンを使ってみました:
{
...
"devDependencies": {
"jshint": "^2.9.5",
"jslint": "^0.11.0",
"mocha": "~3.1",
"proxyquire": "^1.8.0",
"sinon": "~1.9"
},
"dependencies": {}
...
}
何か助けがありがとう!あなたはそれを交換するproxyquire
を使用してもをしている場合(実際にはrequire()
とproxyquire
の両方を壊しているため、fs.readFileSync()
はあなたの問題を引き起こしているスタブ、)
ありがとう@robertklep、:
はこれを試してみてください!私は少し混乱しています。 Githubの例では、fs:https://github.com/thlorenz/proxyquire/blob/master/examples/sinon/foo-tests.jsのメソッドをスタブしています。 – Andrew
@Andrewこれらの例は古いです(その特定のファイルでは5年です)。その間、Node.js内部が変更されたと思います。単に 'fs.readFileSync()'をスタブするだけで、最近のNode.jsのバージョンでは事が壊れてしまいます。 – robertklep