接入骨干视图的功能以制作 sinon 存根

Accesing a backbone view's function to make a sinon stub

本文关键字:sinon 存根 功能 视图 接入      更新时间:2023-09-26

我正在开发骨干应用程序,我必须使用 sinon.js 和 Qunit.js 对其进行单元测试。场景是我有一个扩展基本视图的 carView,而基本视图扩展了主干的视图。

我有一个函数说 buildFormUrl 在汽车视图中返回一个字符串。字符串值根据用户操作进行更改。

是否可以使用 sinon.stub 制作 buildFromUrl 存根的存根并调用存根函数,然后检查返回值?

主干代码片段:

             var CarSearchView = BaseView.extend({
             intitalize : function(){
               //some code
             },
             buildFormUrl: function(baseUrl){
             // process a different form url based on new/used selection
             var newUsedToggleValue = this.$('#cars-form-new-used-select').val(),
                 url = baseUrl;
                 if (newUsedToggleValue === 'used') {
                   url += 'for-sale/searchresults.action';
                 } else {
                   url += 'go/search/newBuyIndex.jsp';
                 }
                return url;
             }
           });

锡农代码片段:

        QUnit.test('_buildURLForm function', function(){
        QUnit.expect(1);
        var BuildFormURLStub = Sinon.stub(CarSearch.prototype, 'buildFormUrl');// building the sinon stub
        var toggleButton     = $(SampleHtml).find('cars-new-used-toggle');
        $(toggleButton).first().click();                                       //clicking the button
        var baseURL = "http:''www.cars.com";
        var output = Sinon.once(BuildFormURLStub.withArgs(baseURL));           // passing the argument and and calling the function using sinon once![enter image description here][1]
        var Expected = baseURL + 'for-sale/searchresults.action';
        QUnit.deepEqual(output,Expected,"For new Toggle button clicked");
   });

收到错误" 函数未定义"

'undefined' 不是一个函数(评估 'Sinon.once(BuildFormURLStub.withArgs(baseURL))')

TypeError: 'undefined' 不是函数 (评估 'Sinon.once(BuildFormURLStub.withArgs(baseURL))')

您需要传入一个对象而不是原型:

var carSearchInstance = getInstanceSomehow();
var BuildFormURLStub = Sinon.stub(carSearchInstance , 'buildFormUrl');