オブジェクトに対しての新しいキーワードで作成されたすべてのインスタンスをモックアウトしようとしています。ここでオブジェクトのインスタンスをモックアウトしようとすると、Sinonスタブが動作しない
が、私はモックしようとしていますオブジェクトです:
var SharedWhiteboardView = function(moduleEl, domService) {
'use strict';
var self;
var sharedWhiteboardProblemImage;
var whiteboardController;
var caller = false;
var toolbarController;
return {
initWhiteboard : function()
{
self = this;
sharedWhiteboardProblemImage = domService.find(moduleEl, '#sharedWhiteboardModule-sharedWhiteboardProblemImage');
var toolbarEL = $('#sharedWhiteboard-toolbar');
toolbarController = new ToolbarController(WhiteboardConstants.SHARED_WHITEBOARD_ID, toolbarEL, null);
toolbarController.init(false);
whiteboardController = toolbarController.getWhiteboardController();
},
enableWhiteboardEdition : function(enabled)
{
if(self.getWhiteboardObject() && self.getWhiteboardObject.hasOwnProperty('enableEdition')) self.getWhiteboardObject().enableEdition(enabled);
whiteboardController.setEnabled(enabled);
}
};
}
これは私がテストしようとしているファイルであり、それは上記のオブジェクトの新しいインスタンスを作成します
Box.Application.addModule('SharedWhiteboardModule', function(context) {
'use strict';
var self;
var moduleEl;
var domService;
var sharedWhiteboardView;
var modal;
var assignmentTimer = 3000;
var sharing = false;
var assignmentImageData = '';
return {
/**
* Initializes the module and caches the module element
* @returns {void}
*/
init: function() {
self = this;
domService = context.getService('DomService');
moduleEl = context.getElement();
sharedWhiteboardView = new SharedWhiteboardView(moduleEl, domService);
sharedWhiteboardView.initWhiteboard();
sharedWhiteboardView.enableWhiteboardEdition(false);
};
}
I sharedWhiteboardView.enableWhiteboardEditionメソッドが 'false'で呼び出されたかどうかをテストするユニットテストを作成しようとしています
しかし、私はスパイまたはスタブをそのメソッドから外していません。私はこれらのソリューションを試してみましたが、彼らは
//最初の試行
sinon.stub(SharedWhiteboardView, "enableWhiteboardEdition", function() {return 0})
// 2番目の試み
sinon.stub(SharedWhiteboardView.prototype, "enableWhiteboardEdition").returns(0);
// 3回目の試み
sandbox.stub(SharedWhiteboardView.prototype, 'enableWhiteboardEdition', checkEnableWhiteboardEdition());
//第四に動作しませんでした試行chrmodによって提供された答えを試す
機能 として未定義のプロパティenableWhiteboardEditionをラップする-Attempted - :
it.only('when type is "SharedWhiteboardModule-setEditable" should call sharedWhiteboardView.enableWhiteboardEdition', function (done) {
const view = SharedWhiteboardView();
sinon.stub(view, "enableWhiteboardEdition", function() {
console.log('Hit');
});
module.onmessage('SharedWhiteboardModule-setEditable', true);
done();
});
エラーなししかし、それはにconsole.logをヒットしない、私は私が得た提案
エラーとして「新しい」キーワードを削除しました存在しないプロパティをスタブすることはできませんenableWhiteboardEdition
助けてください。私はここで死んだ終わりに達しました。ここで
はcodepenです:http://codepen.io/anon/pen/bgmNxx?editors=0011
私がやろうとしていますすべては私のモジュールがenableEdition
あなたの設定は何ですか? SharedWhiteboardViewファクトリで作成された既存のメソッドのメソッドをスタブする方法はありません。これは、それらがSharedWhiteboardView.prototypeではなくオブジェクトのメソッドであるためです。この問題を解決するには、SharedWhiteboardViewをコンストラクタに変換し、そのプロトタイプのメソッドを記述することができます。 もう一つの方法は、SharedWhiteboardViewの "インスタンス"をモジュールのプロパティとして公開することです。sharedWhiteboardView = new SharedWhiteboardView(.. ')そして、特定のオブジェクトにスタブを置く:' sinon.stub(module.sharedWhiteboardView、... ' – chrmod
私はこれを試しました - self.sharedWhiteboardView = new SharedWhiteboardView(moduleEl、domService);私のテストでは、sinon.stub(module.sharedWhiteboardView)を実行しました。(console.log( "Hit"); }); undefinedはコンストラクタではありません'sinon.stub(module.sharedWhiteboardView) – alyn000r
http://codepen.io/anon/pen/VPEYKj?editors=0011 < - Codepenを作成 – alyn000r