2012-02-25 6 views
1

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

Хеш, как выглядит мой spec beforeEach (переменные beforeEach являются переменными в функции описания).

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

Когда я запускаю тест, консоль показывает «сохранение», но обратный вызов успеха не вызван.

+2

Вызывается ли обратный вызов ошибки? – abraham

+0

Ах, ха! Ошибка вызвана! Я никогда не думал об этом. – bittersweetryan

ответ

4

Магистраль ожидает, что текст ответа будет действительным JSON и был взломан из-за ответа «ОК» в методе server.respondWith().

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

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

Обработчик успех обрабатывался успешно.

+0

Это был не полный отход, комментарий @abraham начал меня по правильному пути. Без этого я не думаю, что быстро получил бы результат. Но да, это всегда маленькие вещи, которые достаются тебе! – bittersweetryan