私はRoRアプリケーションをテストしようとしています。私は私のコントローラでActionController :: RoutingErrorを引き起こすためにテストするとき、私はエラーを以下の取得: ガット1つの故障と1つのその他のエラー:が必要です。ActionController :: RoutingErrorが、レールアプリでブロックが指定されていませんでしたrspec
2.1) Failure/Error: expect(visit meters_path).to raise_error(ActionController::RoutingError)
expected ActionController::RoutingError but was not given a block
# ./spec/integration/meter_behavior_spec.rb:70:in `block (2 levels) in <top (required)>'
2.2) Failure/Error: raise ActionController::RoutingError.new('Not Found')
ActionController::RoutingError:
Not Found
は理由は何ですか? これは、テスト宝石の私のリストです:
group :development, :test do
gem 'factory_girl_rails'
gem 'faker'
gem 'rspec-rails'
end
group :test do
gem 'capybara'
gem 'database_cleaner'
gem 'launchy'
gem 'selenium-webdriver', '2.53.4'
gem 'capybara-webkit'
gem 'shoulda-matchers', '~> 3.1'
end
私のspecファイルは、私はあなたが単に会っ訪問渡す必要があると考えてい
meter_behavior_spec.rb
scenario 'a visitor cannot to view meters pages', driver: :webkit do
user = FactoryGirl.create(:client1)
user.meters.create(attributes_for(:meter))
expect(visit meters_path).to raise_error(ActionController::RoutingError)
end
meters_controller.rb:
before_action only: :index do
access_allowed_for(['Client'])
end
# GET /meters
# GET /meters.json
def index
respond_to do |format|
format.json { render json: MetersDatatable.new(view_context, current_user) }
format.html
end
end
application_controller.rb:
def access_allowed_for(statuses_ary=[])
statuses_ary << 'Admin'
if !user_signed_in? || statuses_ary.exclude?(current_user.try(:status))
raise ActionController::RoutingError.new('Not Found')
end
end
1私は私のgemfileに 'web-console'と' better errors'の両方の宝石があることを確認しましたが、どちらも 'development'グループにあります。 2次に、 'Capybara.raise_server_errors = true'文字列を' spec/support/capybara.rb'ファイルに追加しましたが、もう一度エラーが出ました。 3最後に 'page.has_text? 'ステートメントを追加しました。ありがとうございました。 –
私は 'Capybara.raise_server_errors = true'文字列にコメントするときは、うまく動作するものをテストします。 –
@ЭрикКеубасовはい - それは本当に、私はちょうどどこかに偽にリセットしていないことを確認したいと思った。 –