2

私は Rspec を初めて使用します。次の 2 つのメソッドのコントローラー仕様を教えてください。インデックス メソッドでは、ユーザー名コントロールを入力してログイン ページのみが表示され、ログイン メソッドに移動し、人の名前を見つけます。person が見つかった場合、コントロールは people パスに移動します。それ以外の場合は、それ自体がインデックス ページであるルート パスに戻ります。

class HomeController < ApplicationController
def index

end

def login
  @person = Person.find(:all, :conditions => ['people.name =?', params[:person][:name]] )

  if @person.blank?
    redirect_to root_path          
  else
    redirect_to people_path
  end
end
end

私を助けてください。
ありがとう。

4

1 に答える 1

5

rspec コントローラーのテストは次のようになります。

describe HomeController do
  render_views
  it "Logs in Person with non-blank name" do
    person = Factory(:Person, name: "non-blank name")
    get :login
    response.should redirect_to(people_path)
  end
  it "does not log in Person with blank name" do
    person = Factory(:Person, name: "") # blank name
    get :login
    response.should redirect_to(root_path)
  end
end

詳細については、 Rails コントローラーの仕様を参照してください。

編集:

Factory: オブジェクト (この場合はテスト オブジェクト) を作成するコード。これは、コードをカスタマイズして、重複を最小限に抑えながらさまざまな属性を持つオブジェクトを作成できるため、テスト オブジェクトを作成するための推奨される方法です。

フィクスチャ: ファクトリを使用していない場合は、作成するオブジェクトごとに属性を指定できます。オブジェクトが 2 ~ 3 個を超えると、このデータはすぐに管理できなくなります (たとえば、属性を追加する場合、これらのオブジェクトごとに変更を加える必要があります)。

スタブ: モデル オブジェクトの作成中にデータベース レコードを作成したくない場合は、モデル コード ホワイト テスト コントローラーをスタブ化できます。

詳細については、次を参照してください。
1.テスト ガイド
2. asciicast (注: このコードは、FactoryGirl gem の古いバージョンを参照しています。FactoryGirl の最新 API については、以下を参照してください)
3. FactoryGirl Readme

于 2012-05-14T07:45:44.240 に答える