Rails3.2バージョンのRailstutorial(.org)のセクション11.2.5では、relationships_controller_spec.rbテストのすべてに合格することができませんでした。つまり、関係の作成と破棄の両方の「成功で応答する必要がある」メソッドです。これは、提供されたコードの正確な複製(コピーアンドペースト)を使用しているにもかかわらずです。受信したメッセージはexpected success? to return true, got false
何らかの形で関連している場合は、フォロー/フォロー解除ボタンがWebブラウザーで更新されませんでしたが= require jquery
、app / Assets / javascripts / application.jsでアクティブ化することでこれを修正できました(ただし、この手順はそうではないようです)チュートリアルテキストのどこかに記載されています)。この修正以前は、関連するcreate.js.erbアクションとdestroy.js.erbアクションはレンダリングされていませんでした。
これで、アプリケーションは機能しているように見えます。これには、ajaxifiedのフォロー/フォロー解除ボタンが含まれます(これらは画面上で更新され、期待どおりに関係が変更されます)。それにもかかわらず、言及された2つのrspecテストは引き続き失敗します。サーバーログを分析しましたが、これを行っても今のところ手がかりは得られていません。
Relationships_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
Relationships_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チュートリアル3(§12.2.5)
ただし、この説明はこの場合には当てはまらないようです(Rails3.2バージョンのチュートリアルではなくRails3.0にも関連しています)。
問題を解決することなく、Webサーバーを数回再起動し、データベースをリセット、再入力、および再準備する手順を実行しました。
私はOSXでruby1.9.3p286とRails3.2.8を使用しています。この問題に対処するための提案をいただければ幸いです。