私は現在、https://github.com/felixge/node-sandboxed-moduleを使って、単体テストで依存関係のモックを挿入できるように実験しています。このモジュールは、サンドボックス化されたモジュールで作成されたオブジェクトの should.js を強制終了します。
myModule.js:
module.exports = {
func1: function () {
return {
'THIS': {
'IS': {
'SPARTA': {
'DONT': 'TRUST ME'
}
}
}
};
}
};
myModule-test.js:
var should = require('should');
var sandboxedModule = require('sandboxed-module');
var myModule1 = require('./myModule');
var myModule2 = sandboxedModule.require('./myModule');
describe('myModule', function () {
it('should return the object', function () {
myModule1.func1().should.be.instanceOf(Object);
});
describe('returned object', function () {
it('should have the correct properties', function () {
myModule1.func1().THIS.should.have.property('IS');
});
});
});
describe('Sandboxed myModule', function () {
describe('returned object', function () {
it('should have the should property', function () {
should.exist(myModule2.func1().should);
});
describe('nested objects', function () {
it('should have the should property', function () {
should.exist(myModule2.func1().THIS.should);
should.exist(myModule2.func1().THIS.IS.should);
});
});
});
});
サンドボックス化されたモジュールに関する次のテストは失敗します。
1) Sandboxed myModule returned object should have the should property:
AssertionError: expected undefined to exist
2) Sandboxed myModule returned object nested objects should have the should property:
AssertionError: expected undefined to exist
Object コンストラクターを提供して、プロトタイプの should の隠しプロパティが利用可能であることを確認しようとしましたが、それも機能しませんでした。
var myModule2 = sandboxedModule.require('./myModule', {
globals: {
Object: Object
}
});
面白いことに、 https://github.com/nathanmacinnes/injectrのような同様のサンドボックス モジュールを使用すると、同じ問題が発生します。これは、ここで誰が何か間違ったことをしているのかについて私を混乱させます.node-sandboxed-moduleとinjectrの両方、ノード自体、should.js、それとも私ですか? :)
助けてくれてありがとう。