如何使用Sinon.js存储附加到'this'对象的方法?

时间:2016-12-21 22:28:14

标签: jquery unit-testing mocking sinon qunit

我正在尝试测试下面附带的'onInit'功能:

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);
            },
...

目标

特别是对于这个函数,我只需要测试调用'setModel'和'main'方法。

我面临的问题

为了将这个'onInit'函数正确地进行单元测试,我需要使用stub / mock进行一些依赖。具体来说,这些依赖关系将如下:

  • '此'关键字/对象附加了'getView'方法

  • 'JSONModel'对象构造函数

我坚持理解如何模仿上述内容。以下是我初学者对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");


        });

我很确定有更好的方法,因为这可能是完全错误的策略。当我完整地学习单元测试时,您的建议将非常受欢迎。如果有帮助,这是我得到的错误:

enter image description here

0 个答案:

没有答案