【问题标题】:Accesing a backbone view's function to make a sinon stub访问主干视图函数以制作 sinon 存根
【发布时间】:2013-10-02 00:54:21
【问题描述】:

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

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

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

主干代码片段:

             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' is not a function (evalating 'Sinon.once(BuildFormURLStub.withArgs(baseURL))')

【问题讨论】:

  • 为什么要存根要测试的功能。这是没有意义的。也许你可以在这里解释你想测试什么。
  • 嗨 Andreas Koberle 我只想检查函数的返回值。这将根据用户输入而改变。我搜索了更多。是否可以使用 spy.returned(obj) 检查该值;其中 object 将是实际的返回值,而 spy 将使用视图函数本身进行初始化?

标签: javascript backbone.js qunit sinon


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2015-06-04
    • 2012-03-04
    • 2020-03-29
    • 1970-01-01
    • 2018-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多