Comment puis-je remplacer les méthodes attachées à l’object ‘this’ à l’aide de Sinon.js?

J’essaie de tester la fonction ‘onInit’ ci-dessous:

function (jQuery, Controller, JSONModel) { "use ssortingct"; var controls; var mainController = Controller.extend("tool.controller.Main", { onInit: function(oEvent) { var inputModel = new JSONModel("./model/inputs.json"); var productsModel = new JSONModel("./model/products.json"); this.getView().setModel(inputModel, "inputModel"); this.getView().setModel(productsModel); controls = viewControls.main.apply(this); }, ... 

Objectif

Pour cette fonction en particulier, je dois simplement vérifier que les méthodes ‘setModel’ et ‘main’ sont appelées.

Le problème auquel je suis confronté

Il y a quelques dépendances que je dois stub / mock afin de considérer cette fonction ‘onInit’ correctement testée. Plus précisément, ces dépendances seraient les suivantes:

  • ‘this’ mot-clé / object associé à une méthode ‘getView’

  • Constructeur d’object ‘JSONModel’

Je suis coincé avec comprendre comment je peux me moquer de ce qui précède. Voici ce que j’ai essayé avec ma compréhension du niveau débutant de Sinon.js:

 QUnit.test("'onInit' Function Test", function(assert) { // Arrange var JSONModel = sinon.stub(); var inputModel = sinon.stub(); var productsModel = sinon.stub(); //spies- what methods are we asserting get called? var setModel = sinon.spy(); var main = sinon.spy() //stubs- what dependencies are we 'faking' sinon.stub(this, 'getView').returns({setModel}); // Act mainController.onInit(); // Assert assert.ok(setModel.called, "setModel called"); assert.ok(main.called, "setModel called"); }); 

Je suis à peu près sûr qu’il existe une meilleure approche car cela pourrait être complètement une mauvaise stratégie. Vos suggestions seront grandement appréciées car j’apprendrai les tests unitaires dans leur intégralité. Voici l’erreur que j’obtiens si ça aide:

entrez la description de l'image ici