2011-02-10 20 views
1

似たような質問がありましたが(Ruby on Rails Tutorial Test Not Passing)、その答えは私の問題には合致しませんでした。できるだけ多くの関連情報を含めるようにしました。rspecテストに失敗しました - ユーザーサインアウト - Ruby on Rails 3チュートリアルブックChap 9

RSPECエラー:

Failures: 1) SessionsController DELETE 'destroy' should sign a user out Failure/Error: controller.should_not be_signed_in expected signed_in? to return false, got true # ./spec/controllers/sessions_controller_spec.rb:58:in `block (3 levels) in '

試験:

describe "DELETE 'destroy'" do 
    it "should sign a user out" do 
     test_sign_in(Factory(:user)) 
     delete :destroy 
     controller.should_not be_signed_in 
     response.should redirect_to(root_path) 
    end 
    end 

SessionsController:

class SessionsController < ApplicationController 
    def destroy 
    sign_out 
    redirect_to root_path 
    end 

    def new 
    @title = "Sign in" 
    end 

    def create 
    user = User.authenticate(params[:session][:email], 
         params[:session][:password]) 

    if user.nil? 
     flash.now[:error] = "Invalid email/password combination" 
     @title = "Sign in" 
     render 'new' 
    else 
     sign_in user 
     redirect_to user 
    end 
    end 

    def destroy 
    end 
end 

セッションヘルパー

module SessionsHelper 
    def sign_in(user) 
    cookies.permanent.signed[:remember_token] = [user.id, user.salt] 
    self.current_user = user 
    end 

    def signed_in? 
    !current_user.nil? 
    end 

    def sign_out 
    cookies.delete(:remember_token) 
    self.current_user = nil 
    end 

    def current_user=(user) 
    @current_user = user 
    end 

    def current_user 
    @current_user ||= user_from_remember_token 
    end 

    private 
    def user_from_remember_token 
     User.authenticate_with_salt(*remember_token) 
    end 

    def remember_token 
     cookies.signed[:remember_token] || [nil,nil] 
    end 
end 

すべての援助をいただければ幸いです。私はこの本を読んで問題に遭遇したのは初めてではありませんが、私が解決できなかったのは初めてです(そして、他の時代と同じように私はそれが私のエラーであると確信しています:-) )。私はgitリポジトリを閲覧しましたが、私が何をすべきか分かりません。

答えて

0

だから、ここには約束が、私はあまりにも、私はこれをしなかったときに去って行ったいくつかの奇妙なRSpecの関連セッションの行動を見た:

すくいデシベル:
すくいデシベルをリセットする:Ctrl + Cキーで
ストップ自動テストを移行
再起動の自動テスト
停止Ctrl-Cを持つレールサーバ
を再起動してレール・サーバ「レールS」

私は、これが問題を解決する可能性がある理由のために良い説明はありませんが、それは私のためにあります。一般的に、私はMichael Hartlのチュートリアルの質にとても感心しています。問題が発生したとき、彼らはいつも私が「間違っている」ことをした結果だった。この特筆すべき問題とCH 11の別の問題は、予期せぬ挙動がDBの状態に起因する可能性があると私を思いました。私のひどく形成されたQ & CH 11問題のAはここにありますRails 3 Tutorial Chapter 11 "Validation failed: Email has already been taken" error

ハートルは、dbを出発点に戻すための推奨方法には入っていません。上記は私のアプローチです。そこには私が見るのが楽しいかもしれないより良いものがあるかもしれません。

+0

whoops、これはしばらく前に更新する予定でした。私はあなたにコメントしていただきありがとうございます。私の間違いは、私が開発に反対したように、テストに対してレーキを実行していないことでした。だから私は2つの違いのデータベーススキーマのために混在した結果を得ていた。 –

1

私は成功して上記を試しました。 rspecによってエラーが生成されるため、サーバーには何もする必要はありません。

0

多分問題はあなたがdef destroy SessionsControllerで2回あるからでしょうか?

class SessionsController < ApplicationController 
    def destroy 
    sign_out 
    redirect_to root_path 
    end 

    . 
    . 
    . 

    def destroy 
    end 
関連する問題