В разделе 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. Любые предложения по решению этой проблемы будут высоко оценены.