gpt4 book ai didi

ruby-on-rails - RSpec Controller 规范就像一个请求规范

转载 作者:行者123 更新时间:2023-12-04 06:06:56 25 4
gpt4 key购买 nike

  • Rails 5.0.0.rc1
  • rspec-core@a99ff26
  • rspec-rails@052206f

我有一个大致如下所示的 Controller 规范:

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 并且我已经在其他项目中成功地做到了这一点。

最佳答案

我发现发生了什么事。我无意识地复制了一个包含 Rack::Test::Methods 的公司标准 spec_helper,将 Rack 方法注入(inject)到我所有的测试中。

关于ruby-on-rails - RSpec Controller 规范就像一个请求规范,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37393291/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com