1

何が間違っているのかわからないので、助けてください。

したがって、タイトルが示すように、すべてがブラウザでうまく機能します。ですから、それは私が正しく理解できない仕様だと思います。

ヘルパー、コントローラー、スペックのコードを何度か書き直しました。

今のところ私の仕様は次のとおりです。

describe "visit as admin" do
    before do
      sign_in admin
      visit organization_users_path # row 20 of users_controller_spec
    end
    it "should display right page" do
      page.should have_selector('title', text: "Users") 
    end
  end

私がそれを実行すると、私は得ます:

1) Organization::UsersController visit as admin should display right page
     Failure/Error: visit organization_users_path
     NoMethodError:
       undefined method `users' for nil:NilClass
     # ./app/controllers/organization/users_controller.rb:5:in `index'
     # ./spec/controllers/organization/users_controller_spec.rb:20:in `block (3 levels) in <top (required)>'

そして、ここに私のコントローラーとヘルパーがあります:

# helper
def current_organization
  @current_organization ||= current_user.organization
end

def admin_user
  unless current_user.admin?
    redirect_to root_path
  end
end

#controller
class Organization::UsersController < ApplicationController
  before_filter :admin_user

  def index
    @users = current_organization.users
  end
end

編集1:差出人rake routes

organization_users GET    /organization/users(.:format)          organization/users#index
4

2 に答える 2

1

indexコントローラの関数のように見えます:current_organizationnilです。

このヘルパーが有効なオブジェクトを返していることを確認してください。

def current_organization
  @current_organization ||= current_user.organization
  raise @current_organization.inspect # <--- use this to inspect this value and delete afterwards
end
于 2012-10-17T20:49:05.513 に答える
0

このエラーは、current_organisationがnilであることを示しています。これは、コンテキストでnilであるcurrent_userを介してロードされるため論理的に見えます。

https://github.com/plataformatec/devise/wiki/How-To:-Test-with-Capybaraを参照して、ユーザーをテストにログインさせることができます。

ただし、current_organizationヘルパーがnilを返さないように、セットアップで組織としてユーザーをログに記録することを忘れないでください

編集:ログインにdeviseを使用していると思いますが、そうでない場合は、認証に何を使用しているかをお知らせください

于 2012-10-17T20:50:51.507 に答える