2

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を使用しています。この問題に対処するための提案をいただければ幸いです。

4

1 に答える 1

0

さて、羊のようになる時間です。railstutorial / sample_app_2nd_ed.gitのクローンを作成した後、この問題に対する非常に簡単な解決策を見つけました。Relationships_controller.rbが複製され、app / controllers /にコピーがあり、spec / controllers /にも(冗長)コピーがあります。残念ながら、デバッグしようとしたバージョンは冗長バージョンであり、実際のバージョンは不完全でした。Facepalm。おそらく、注意話。

于 2015-03-31T06:08:46.977 に答える