Тестирование Backbone.js Сохранение модели с использованием Sinon не вызывает успешный обратный вызов - PullRequest
1 голос
/ 25 февраля 2012

Я тестирую приложение Backbone.js с использованием Jasmine и Sinon.Я пытаюсь проверить, что нажатие кнопки вызывает метод save () модели и обрабатывает обратный вызов успеха, который добавляет сообщение в элемент el представления.У меня проблемы с тем, чтобы заставить сервер sinon вызывать успешный обратный вызов модели.

Вот как выглядит моя спецификация beforeEach (все переменные в beforeEach имеют переменную область действия в функции description).

beforeEach(function(){
    server = sinon.fakeServer.create(); //create the fake server
    server.respondWith([200, { "Content-Type": "text/html", "Content-Length": 2 }, "OK"]); //fake a 200 response

    loadFixtures('signup_modal.html'); //load the fixture

    element = $("#signupModal");
    specSignUp = new SignUp();
    signUpView = new SignUpView({model : specSignUp, el: $("#signupModal")});
});

И вот как выглядит настоящий тест:

it("Should call send request",function(){

    element.find("#signupButton").trigger('click'); //click the button which should trigger save

    server.respond(); //fake the response which should trigger the callback

    expect(element).toContain("#message");
});

Пытаясь построить реализацию этого, я создал простой метод обратного вызова, чтобы показать мне, что успешный обратный вызов запускается beign:

sendRequest: function(){
    console.log("saving");
    this.model.save(this.model.toJSON(),{success: function(data){
        console.log("success");
        iris.addMessage(this.$("#messageContainer"),"Thank you");
    }});
}

При запуске теста консоль показываетсохранение ", но обратный вызов успеха не вызывается.

1 Ответ

4 голосов
/ 25 февраля 2012

Backbone ожидает, что текст ответа будет действительным JSON, и выполняется бомбардировка из-за ответа "ОК" в методе server.respondWith().

Изменение метода на:

server.respondWith([200, {"Content-Type":"text/html","Content-Length":2}, '{"OK":"True"}']);

Успешный обратный вызов был успешно обработан.

...