3

私のusers_controller.rb

# GET /users/1/edit
def edit
  @user = current_user
  #@user = User.find(params[:id])
end

私の見栄えの良いusers_controller_spec.rb(コメントアウトされたすべての試みに注意してください)

describe "Authenticated examples" do
  before(:each) do
    activate_authlogic
    UserSession.create Factory.build(:valid_user)
  end

describe "GET edit" do
  it "assigns the requested user as @user" do
    @user = Factory.create(:valid_user)
    assigns(:user).should be(Factory.build(:valid_user))
  end
end

user.rb-ファクトリ

Factory.define :valid_user, :class => User do |u|
  u.username "Trippy"
  u.password "password"
  u.password_confirmation "password"
  u.email "elephant@gmail.com"
  u.single_access_token "k3cFzLIQnZ4MHRmJvJzg"
end

基本的に、私はこのRSpecテストを最も適切な方法で合格させようとしています。

私は非常に簡単に言うことができる必要があります、それはmock_userですcurrent_user

users_controller.rbで使用すると、このテストに合格します。@user = User.find(params[:id])

ありがとう!!

4

3 に答える 3

4

rspec-rails ( https://github.com/rspec/rspec-rails/issues/391を参照) にはバグがあり、RSpec のグローバル before フックで使用すると activate_authlogic が壊れます。

それ以外の

# spec_helper.rb

# In RSpec.configure
config.before :each, :type => :controller do
  activate_authlogic
  user = User.new(:login => "user", :password => "secret")
  UserSession.create(user)
end

ヘルパーを定義できます

# spec_helper.rb

require 'authlogic/test_case'
module LoginHelper
  include Authlogic::TestCase

  def login_user
    activate_authlogic
    user = User.new(:login => "user", :password => "secret")
    UserSession.create(user)
  end
end

必要に応じて before ブロックで参照します

# <controller>_spec.rb

describe "GET 'edit' when logged in" do
  before do
    login_user
  end

  it "should be successful" do
    get 'edit'
    response.should be_success
end
于 2011-06-05T16:03:13.667 に答える
3

これが Rspec 2 に当てはまるかどうかはわかりませんが、Authlogic のドキュメントによると、これをbeforeメソッドまたは に配置する必要がありspec_helperます。

include Authlogic::TestCase
activate_authlogic

そして、テスト環境の外で行うのと同じように、ユーザー セッションを作成できます。

FWIW 私は Authlogic の例でのモック/スタブ化をあきらめ、@user = Factory.create(:user)その後 UserSession.create(@user) でログインします。

編集

これは、提供した例を使用した試みです。あなたが抱えている問題は、オブジェクトassignsが一致しているものと同じではないということだと思います。

describe "Authenticated examples" do
  before(:each) do
    # assuming you put include Authlogic::TestCase in spec_helper
    activate_authlogic
    @user = Factory.create(:valid_user)
    UserSession.create(@user)
  end

describe "GET edit" do
  it "assigns the requested user as @user" do
   # add a MyModel.stub!(:find) here if the edit action needs it
   get :id => 1 # pass in an ID so the controller doesn't complain
   assigns(:user).should == @user
  end
end
于 2010-09-08T08:25:21.697 に答える
1

すべてはこのページにあります:

http://rdoc.info/github/binarylogic/authlogic/master/Authlogic/TestCase

いくつかの情報を入力する必要があります:

 require "authlogic/test_case" # include at the top of test_helper.rb
  setup :activate_authlogic # run before tests are executed
  UserSession.create(users(:whomever)) # logs a user in

この場合、あなただけを変更する必要がありusers(:whomever)ますmock_user

于 2010-09-07T15:44:01.483 に答える