0

セッションコントローラーをテストする方法を確認するためにこの回答を見て、次のようなものを書きました:

require 'spec_helper'

describe SessionsController do
  context "We should login to the system and create a session" do
    let :credentials do
      {:user_name => "MyString", :password => "someSimpleP{ass}"}
    end

    let :user do
      FactoryGirl.create(:user, credentials)
    end

    before :each do
      post :create , credentials
    end

    it "should create a session" do
      puts user.inspect
      puts session[:user_id]
      #session[:user_id].should == user.id
    end
  end
end

それに基づいて、工場の女の子のユーザーを作成しました。

FactoryGirl.define do
  factory :user, :class => 'User' do
    name "sample_user"
    email "MyString@gmail.com"
    user_name "MyString"
    password "someSimpleP{ass}"
  end
end

これですべてが機能します -before :each doステートメントを実行してください - 「ユーザー」を「ログイン」させることはありません - したがって、コントローラーの機能をテストできません。セッションは適切に作成されていますか?

ほとんどの人は、カピバラを使用してその方法でテストすると言うでしょう-しかし、それは間違っています、IMO-動作するフロントエンドテストを行っているかどうかは確かですが、コントローラーベースのロジックをテストしています. これが機能しない理由を教えてもらえますか? ルーティングは正常に機能します。

puts session[:user_id]はゼロに近づいています。

4

2 に答える 2

2

let句に対しても遅延評価されるbeforeため、ログインする時点でユーザーは作成されていませんpost。を使用するように変更するとlet!、この問題を回避できます。

于 2013-09-02T18:11:31.237 に答える