- Рельсы 5.0.0.rc1
- rspec-core@a99ff26
- rspec-rails@052206f
У меня есть спецификация контроллера, которая выглядит примерно так:
require "rails_helper"
RSpec.describe InquiriesController, type: :controller do
describe "#create" do
let(:inquiry_attributes) { attributes_for(:inquiry) }
before do
post :create, inquiry: inquiry_attributes
end
it "whatever" do
expect(2).to be 2
end
end
end
Он находится в файле spec/controllers/inquiries_controller_spec.rb, поэтому RSpec не должен делать вывод, что это спецификация запроса на основе его местоположения.
Когда я запускаю эту спецификацию, я получаю следующую ошибку:
1) InquiriesController#create whatever
Failure/Error: post :create, inquiry: inquiry_attributes
URI::InvalidURIError:
bad URI(is not URI?): create
# /Users/spetryk/.gem/ruby/2.3.1/gems/rack-test-0.6.3/lib/rack/test.rb:193:in `env_for'
# /Users/spetryk/.gem/ruby/2.3.1/gems/rack-test-0.6.3/lib/rack/test.rb:66:in `post'
Хм, похоже, что post
исходит из Rack. Не уверен, почему. Вот мои spec_helper и rails_helper:
spec_helper.rb
RSpec.configure do |config|
config.expect_with :rspec do |expectations|
expectations.include_chain_clauses_in_custom_matcher_descriptions = true
end
config.mock_with :rspec do |mocks|
mocks.verify_partial_doubles = true
end
config.filter_run focus: true
config.run_all_when_everything_filtered = true
end
rails_helper.rb
ENV["RAILS_ENV"] ||= "test"
require File.expand_path("../../config/environment", __FILE__)
abort("The Rails environment is running in production mode!") if Rails.env.production?
require "spec_helper"
require "rspec/rails"
Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f }
ActiveRecord::Migration.maintain_test_schema!
RSpec.configure do |config|
config.use_transactional_fixtures = true
# Yes, I've tried removing this line
config.infer_spec_type_from_file_location!
config.filter_rails_from_backtrace!
config.include Rails.application.routes.url_helpers
config.include FactoryGirl::Syntax::Methods
end
Мой InquiriesController находится в app/controllers/inquiries_controller.rb, не находится под модулем, и маршрут подключен правильно (я проверил это, посетив его вручную и убедившись, что он работает). Метод действительно называется create
, и я успешно проделал это с другими проектами.
:create
на/inquiries
делает спецификацию пройденной. - person Steven Petryk   schedule 23.05.2016