2017-10-16 13 views
0

Je suis nouveau à QUnit + sinon.js, je veux écrire un test unitaire pour la fonction onMultiSelectPress, donc je dois railler:Comment stub voir le modèle dans ui5?

this.myController._oList

this.myController.getResourceBundle()

this.myController.getModel("masterView")

droit ?

Je suis coincé à obtenir un talon pour getModel("masterView"), une suggestion?

onInit : function() { 
    var oList = this.byId("list"), 
     oViewModel = this._createViewModel(); 
    this._oList = oList; 
    this.setModel(oViewModel, "masterView");  
}, 

_createViewModel : function() { 
    return new JSONModel({ 
     isFilterBarVisible: false, 
     filterBarLabel: "", 
     delay: 0, 
     title: this.getResourceBundle().getText("masterTitleCount", [0]), 
     noDataText: this.getResourceBundle().getText("masterListNoDataText"), 
     sortBy: "Name", 
     groupBy: "None", 
     listMode: "SingleSelectMaster", 
     showDeleteButton: false 
    }); 
}, 

getModel : function (sName) { 
    return this.getView().getModel(sName); 
}, 

onMultiSelectPress : function() { 
    var oMasterViewModel = this.getModel("masterView"); 

    switch(this._oList.getMode()) { 
     case "MultiSelect": 
      oMasterViewModel.setProperty("/listMode", "SingleSelectMaster"); 
      oMasterViewModel.setProperty("/showDeleteButton", false); 
      break; 
     case "SingleSelectMaster": 
      oMasterViewModel.setProperty("/listMode", "MultiSelect"); 
      oMasterViewModel.setProperty("/showDeleteButton", true); 
      break; 
    } 
}, 

Répondre

1

Ajouter un oViewStub dans beforeEach et définir un modèle JSON vide à l'aide pour les tests.

QUnit.module("MasterController", { 
     beforeEach: function() { 
      this.oMasterController = new MasterController(); 
      this.models = {}; 
      var oViewStub = { 
       setModel: function(model, name) { 
        this.models[name] = model; 
       }.bind(this), 
       getModel: function(name) { 
        return this.models[name]; 
       }.bind(this) 
      }; 
      sinon.stub(Controller.prototype, "getView").returns(oViewStub); 
     }, 

     afterEach: function() { 
      this.oMasterController.destroy(); 
      jQuery.each(this.models, function(i, model) { 
       model.destroy(); 
      }); 
      Controller.prototype.getView.restore(); 
     } 
    }); 

    QUnit.test("test onMultiSelectPress() ", function(assert) { 
     var oMasterController = this.oMasterController; 
     var oModel = new JSONModel(); 
     oMasterController.setModel(oModel, "masterView"); 
     var oMasterViewModel = oMasterController.getModel("masterView"); 

     oMasterController._oList = new sap.m.List(); 
     sinon.stub(oMasterController._oList, "getMode").returns("MultiSelect"); 
     oMasterController.onMultiSelectPress(); 
     assert.strictEqual(oMasterViewModel.getProperty("/listMode"), "SingleSelectMaster", "Did change list mode to SingleSelectMaster"); 
     assert.strictEqual(oMasterViewModel.getProperty("/showDeleteButton"), false, "Did hide the delete button"); 

     oMasterController._oList.getMode.restore(); 
     sinon.stub(oMasterController._oList, "getMode").returns("SingleSelectMaster"); 
     oMasterController.onMultiSelectPress(); 
     assert.strictEqual(oMasterViewModel.getProperty("/listMode"), "MultiSelect", "Did change list mode to MultiSelect"); 
     assert.strictEqual(oMasterViewModel.getProperty("/showDeleteButton"), true, "Did show the delete button"); 

     oMasterController._oList.destroy(); 
    }); 
+0

Comment puis-je tester la méthode onInit? Je peux tester l'existence de la méthode mais je ne peux pas essayer de tester JSON à l'intérieur. 'OnInit: function onInit() { // chaîne HTML lié au contrôle de texte mis en forme var oModel = new JSONModel ({ titre: 'Bonjour', message: '

Vous

' + accepter: « Je Accepter ', déclin:' I Decline ' }); this.getView(). SetModel (oModèle); }, ' – user557657

+0

' assert.ok (this.getView(). GetModel (oModèle)) '? @ user557657 – Tina

+0

Je ne suis pas en mesure d'obtenir cette référence dans le test unitaire. – user557657