Я пытаюсь протестировать свой контроллер Rails 3.0.9 с Rspec 2.6.4 и Webrat 0.7.3. Мой контроллер выглядит так:
#metrics_controller.rb
class MetricsController < ApplicationController
def show
@metric = Metric.all(:msrun_id => params[:id]).first
end
def index
@metrics = Metric.all
end
end
И моя спецификация контроллера выглядит так:
#metrics_controller_spec.rb
require 'spec_helper'
describe MetricsController do
describe "GET #index" do
it "should be successful" do
get :index
response.should be_success
end
end
describe "GET show" do
it 'contains an overview of a metric' do
get :show, :id => 1
response.should have_selector('title', :content => "Metric Overview")
end
end
end
Это выглядит очень похоже на другие примеры, которые я видел в документации, но когда я запускаю bundle exec rspec spec/controllers/metrics_controller_spec.rb
, я получаю некоторые странные ошибки:
1) MetricsController GET #index should be successful
Failure/Error: response.should be_success
TypeError:
wrong argument type RSpec::Matchers::BePredicate (expected Proc)
# ./spec/controllers/metrics_controller_spec.rb:8
2) MetricsController GET show contains an overview of a metric
Failure/Error: response.should have_selector('title')
TypeError:
wrong argument type Webrat::Matchers::HaveSelector (expected Proc)
# ./spec/controllers/metrics_controller_spec.rb:16
Похоже, что-то странное происходит с response.should
методом. Если я изменю первый пример на что-то более подробное, что не вызовет should
на response
, например:
response.success?.should == true
тогда пример работает нормально, но почему бы should
ожидать Proc
? Любые идеи о том, как я могу это исправить?