SpyOn метод представления основы с использованием жасмина

У меня есть представление магистрали, и я хочу создать тест, чтобы подтвердить, что событие щелчка на некотором элементе вызовет функция, связанная с этим элементом. Мое мнение:

PromptView = Backbone.View.extend({
        id:"promptPage",
        attributes:{
            "data-role":"page",
            "data-theme":"a"
        },
        events:{
            "click #btnYes":    "answerYes",
            "tap #btnYes":      "answerYes"
        },
        render: function(){
            $(this.el).html(_.template($('#promptPage-template').html(), this.model.toJSON()));

            return this;
        },
        answerYes: function(){
            alert('yes');
        }
    });

Моя спецификация:

beforeEach(function() {
            model = new PromptModel;
            view = new PromptView({model:model});
            loadFixtures('promptPage.tmpl');
        });

 it("should be able to answer a question with yes", function() {
                var button = $("#btnYes", view.render().el);
                expect(button.length).toBe(1);

                spyOn(view, 'answerYes');

                button.click();
                expect(view.answerYes).toHaveBeenCalled();

            });

Однако приведенное выше определение представления создает метод answerYes для прототипа proto , но шпион создает функция на фактическом экземпляре в представлении, поэтому я получаю view.answerYes (), который является шпионским и представлением .__ proto __. answerYes, который я действительно хочу отслеживать.

Как я могу создать шпион, чтобы он переопределил метод answerYes определения представления?

18
задан mishod 26 October 2011 в 06:52
поделиться