Доступ к функции представления магистрали для создания заглушки sinon

Я работаю над приложением Backbone, и мне нужно протестировать его с помощью sinon.js и Qunit.js. Сценарий таков: у меня есть один carView, который расширяет baseview, а baseview расширяет представление магистрали.

У меня есть одна функция, скажем, buildFormUrl в представлении автомобиля, которая возвращает строку. Строковое значение изменяется в зависимости от действий пользователя.

Можно ли сделать заглушку buildFromUrl с помощью sinon.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' не является функцией (оценка 'Sinon.once(BuildFormURLStub.withArgs(baseURL))')


person nitansh bareja    schedule 26.09.2013    source источник
comment
Почему вы хотите заглушить функцию, которую хотите протестировать. Это не имеет смысла. Может быть, вы можете объяснить, что вы хотите проверить здесь.   -  person Andreas Köberle    schedule 26.09.2013
comment
Привет, Андреас Коберле, я хочу проверить только возвращаемое значение функции. который будет меняться в зависимости от ввода пользователя. Я искал его больше. можно ли проверить значение с помощью spy.returned(obj); где объект будет фактическим возвращаемым значением, а шпион будет инициализирован самой функцией просмотра?   -  person nitansh bareja    schedule 27.09.2013


Ответы (1)


Вам нужно передать объект вместо прототипа:

var carSearchInstance = getInstanceSomehow();
var BuildFormURLStub = Sinon.stub(carSearchInstance , 'buildFormUrl'); 
person Mrchief    schedule 29.10.2013