I'm attempting to test the 'onInit' function attached below:
function (jQuery, Controller, JSONModel) {
        "use strict";
        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);
            },
...
Objective
For this function in particular, I simply need to test that the 'setModel' and 'main' methods get called.
The Problem I'm facing
There are a few dependencies that I need to stub/mock in order to consider this 'onInit' function properly unit tested. Specifically those dependencies would be would be the following:
'this' keyword/object that has a 'getView' method attached to it
'JSONModel' object constructor
I'm stuck with understanding how I can mock the aforementioned. Below is what I have tried with my beginner level understanding of 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");
        });
I'm pretty sure there is a better approach as this might be completely the wrong strategy. Your suggestions will greatly be appreciated as I learn unit testing in its entirety. Here is the error I get if it helps:
