Получение неправильного аргумента типа RSpec :: Matchers :: Matcher (ожидаемый Proc) в Rspec при тестировании ответов в Rails - PullRequest
0 голосов
/ 30 июня 2011

Я пытаюсь протестировать свой контроллер 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? Любые идеи о том, как я могу это исправить?

1 Ответ

0 голосов
/ 02 июля 2011

Это не особенно полезный ответ, но я приведу его здесь на случай, если кто-то еще застрянет на том же самом.Я унаследовал проект от кого-то другого, и они настроили его на использование как рельсов, так и рельсов.Изменив Gemfile, чтобы он выглядел так:

source 'http://rubygems.org'

RAILS_VERSION = '~> 3.0.7'
DM_VERSION    = '~> 1.1.0'
gem 'railties', RAILS_VERSION, :require => 'rails'
gem 'activesupport', RAILS_VERSION
gem 'actionpack', RAILS_VERSION
gem 'actionmailer', RAILS_VERSION
gem 'dm-rails',          DM_VERSION
gem 'rspec-rails'
#other gems below

Вместо чего-то вроде этого:

source 'http://rubygems.org'
gem 'rails'    
gem 'dm-rails',          '~> 1.1.0'
gem 'rspec-rails'
#other gems below

вместе с изменением config/application.rb так, чтобы требовать рейки вместо рельсов, казалось, это исправило,Ключ, похоже, использовал railties вместо всех rails вместе с dm-rails.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...