RailsTutorial 11.2.5 Вызов Ajax не возвращает успех

В разделе 11.2.5 версии Rails 3.2 файла Railstutorial(. org), мне не удалось пройти все мои тесты Relations_controller_spec.rb, а именно методы «должен отвечать успешно» как для создания, так и для уничтожения отношений. И это несмотря на использование точных дубликатов (копирование и вставка) предоставленного кода. Полученное сообщение: expected success? to return true, got false

В случае, если это каким-то образом связано, мои кнопки подписки/отписки не обновлялись в веб-браузере, но я смог исправить это, активировав = require jquery в app/assets/javascripts/application.js (хотя этот шаг, похоже, не упоминаться в любом месте учебного текста). До этого исправления связанные действия create.js.erb и destroy.js.erb не отображались.

Теперь приложение похоже работает, включая кнопки подписки/отмены подписки с ajax (они обновляются на экране и изменяют отношения, как и ожидалось). Тем не менее, два упомянутых теста rspec продолжают давать сбои. Я проанализировал журналы сервера, но это пока не дало мне никаких подсказок.

отношения_controller_spec.rb

require 'spec_helper'

describe RelationshipsController do

  let(:user) { FactoryGirl.create(:user) }
  let(:other_user) { FactoryGirl.create(:user) }

  before { sign_in user }

  describe "creating a relationship with Ajax" do

    it "should increment the Relationship count" do
      expect do
        xhr :post, :create, relationship: { followed_id: other_user.id }
      end.to change(Relationship, :count).by(1)
    end

    it "should respond with success" do
      xhr :post, :create, relationship: { followed_id: other_user.id }
      response.should be_success
    end
  end

  describe "destroying a relationship with Ajax" do

    before { user.follow!(other_user) }
    let(:relationship) { user.relationships.find_by_followed_id(other_user) }

    it "should decrement the Relationship count" do
      expect do
        xhr :delete, :destroy, id: relationship.id
      end.to change(Relationship, :count).by(-1)
    end

    it "should respond with success" do
      xhr :delete, :destroy, id: relationship.id
      response.should be_success
    end
  end
end

отношения_controller.rb

class RelationshipsController < ApplicationController
  before_filter :signed_in_user

  def create
    @user = User.find(params[:relationship][:followed_id])
    current_user.follow!(@user)
    respond_to do |format|
      format.html { redirect_to @user }
      format.js
    end
  end

  def destroy
    @user = Relationship.find(params[:id]).followed
    current_user.unfollow!(@user)
    respond_to do |format|
      format.html { redirect_to @user }
      format.js
    end
  end
end

Репозиторий приложения можно найти по адресу https://github.com/spinnn/testapp.

я отметил

Кнопка не обновляется в Ajax - Rails Tutorial 3 в §12.2.5

но это обсуждение кажется неприменимым в данном случае (оно также относится к версии руководства для Rails 3.0, а не для версии Rails 3.2).

Я несколько раз предпринял шаги по перезапуску веб-сервера, а также сбросу, повторному заполнению и повторной подготовке базы данных без какого-либо решения проблемы.

Я использую ruby ​​1.9.3p286 и Rails 3.2.8 на OS X. Любые предложения по решению этой проблемы будут высоко оценены.


person spinnn    schedule 08.12.2012    source источник
comment
Если бы вы могли опубликовать какой-нибудь код или, по крайней мере, указать нам на свой репозиторий вашего приложения на github, это было бы здорово.   -  person thank_you    schedule 09.12.2012
comment
Ладно, пора быть застенчивым. После клонирования railstutorial/sample_app_2nd_ed.git я нашел очень простое решение этой проблемы. Relations_controller.rb был дублирован, с копией в app/controllers/ и (избыточной) копией также в spec/controllers/ К сожалению, версия, которую я пытался отлаживать, была избыточной версией, а реальная версия была неполной. Фейспалм. Поучительная история, наверное.   -  person spinnn    schedule 09.12.2012
comment
Не могли бы вы сделать приведенный выше комментарий ответом и принять его для всеобщего ознакомления.   -  person Paul Fioravanti    schedule 25.12.2012


Ответы (1)


Ладно, пора быть застенчивым. После клонирования railstutorial/sample_app_2nd_ed.git я нашел очень простое решение этой проблемы. Relations_controller.rb был дублирован, с копией в app/controllers/ и (избыточной) копией также в spec/controllers/ К сожалению, версия, которую я пытался отлаживать, была избыточной версией, а реальная версия была неполной. Фейспалм. Поучительная история, наверное.

person spinnn    schedule 31.03.2015