2

アプリのルートに配置されたrefineryCMSでカスタムコントローラーを開発しています

class ExchangeController < ApplicationController
    def exchange
    end
end

正常に動作しますが、テストするには、このような製油所ユーザーにログインする必要があります

describe "Exchange action" do
   login_refinery_user
   it 'should return a 200' do
    get '/exchange' 
    response.code.should == '200'
   end
end

しかし、それは機能しません:((未定義のローカル変数またはメソッド `login_refinery_user')そのログインメソッドを呼び出さずにimgettingテーブル'refinery_roles'が見つかりませんでした

誰かが私を正しい方向に向けることができますか?

4

3 に答える 3

2

Refinery 2 に必要なのは、spec/support/devise.rb の次の行だけです。

RSpec.configure do |config|
  config.include Devise::TestHelpers, :type => :controller
  config.extend  ::Refinery::Testing::ControllerMacros::Authentication, :type => :controller
  config.extend  ::Refinery::Testing::RequestMacros::Authentication, :type => :request

end

これで、「login_refinery_user」は、https://github.com/resolve/refinerycms/blob/master/testing/lib/refinery/testing/controller_macros/authentication.rbおよび https://github.comの他のヘルパーと共に利用できるようになり ます。 /resolve/refinerycms/blob/master/testing/lib/refinery/testing/request_macros/authentication.rb

于 2012-08-12T23:57:25.460 に答える
1

これは私が Refinery 1.0.9 で行っている方法です。Refinery 2 では微調整が必​​要になる場合があります。

「controller_macros.rb」という名前のファイルを作成し、spec/support/refinery/ の下に配置します。

controller_macros.rb で login_refinery_user を定義します

module Refinery
  module ControllerMacros
    def login_refinery_user
      before (:each) do
        @refinery_user = Factory(:refinery_user)
        @request.env["devise.mapping"] = Devise.mappings[:admin]
        sign_in @refinery_user
      end
    end
  end
end

factory.rb ファイルに、次の 2 つのファクトリがあることを確認してください。

factory :user do
  sequence(:username) { |n| "person#{n}" }
  sequence(:email) { |n| "person#{n}@cucumber.com" }
  password  "greenandjuicy"
  password_confirmation "greenandjuicy"
end

factory :refinery_user, :parent => :user do
  roles { [ Role[:refinery] ] }

  after_create do |user|
    Refinery::Plugins.registered.each_with_index do |plugin, index|
      user.plugins.create(:name => plugin.name, :position => index)
    end
  end
end

spec_helper.rb ファイルで、コントローラー マクロ モジュールをコントローラー テストにインクルードし、Devise テスト ヘルパーがあることを確認します。

RSpec.configure do |config|
  config.include ::Devise::TestHelpers, :type => :controller
  config.extend  ::Refinery::ControllerMacros, :type => :controller
end
于 2012-05-29T16:16:43.750 に答える
0

私を助けたのは、現在ログインしているユーザーがアクセスできるプラグインのリストにプラグイン/エンジン名を追加することを確認することです:

refinery_login_with :refinery_user 

before do
  logged_in_user.plugins = logged_in_user.plugins | %w(<plugin name>)
end
于 2015-07-15T12:23:23.527 に答える