2

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

我在汽车视图中有一个函数说 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:“未定义”不是函数(评估“Sinon.once(BuildFormURLStub.withArgs(baseURL))”)

4

1 回答 1

1

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

var carSearchInstance = getInstanceSomehow();
var BuildFormURLStub = Sinon.stub(carSearchInstance , 'buildFormUrl'); 
于 2013-10-29T20:45:28.447 回答