2

バックボーン アプリケーションに取り組んでおり、sinon.js と Qunit.js を使用して単体テストを行う必要があります。シナリオは、baseview を拡張する carView が 1 つあり、baseview がバックボーンのビューを拡張することです。

文字列を返す車のビューにbuildFormUrlという関数が1つあります。文字列値は、ユーザー アクションに基づいて変更されます。

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

Sinon コード スニペット:

        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))' を評価しています)

4

1 に答える 1

1

プロトタイプの代わりにオブジェクトを渡す必要があります。

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