gpt4 book ai didi

ruby-on-rails - rails/rspec 看不到 shoulda 匹配器

转载 作者:行者123 更新时间:2023-12-04 22:58:43 30 4
gpt4 key购买 nike

Rails 4.2.4、Rspec 3.3.1、shouda-matchers 3.0.0。
我正进入(状态

  #...
358) Participant validations
Failure/Error: it { should ensure_length_of(:coresp_country).is_at_most(255) }
NoMethodError:
undefined method `ensure_length_of' for #<RSpec::ExampleGroups::Participant::Validations:0x0000000f40aec0>
# ./spec/models/participant_spec.rb:100:in `block (3 levels) in <top (required)>'

359) Participant validations company
Failure/Error: it { should ensure_length_of(:company).is_at_most(255) }
NoMethodError:
undefined method `ensure_length_of' for #<RSpec::ExampleGroups::Participant::Validations::Company:0x0000000f414ab0>
# ./spec/models/participant_spec.rb:149:in `block (4 levels) in <top (required)>'

360) Participant validations company declared_type = COMPANY
Failure/Error: it { should validate_presence_of(:company) }
NoMethodError:
undefined method `validate_presence_of' for #<RSpec::ExampleGroups::Participant::Validations::Company::DeclaredTypeCOMPANY:0x0000000f429c58>
#...
还有更多类似的失败(看起来 shoulda-matchers 不起作用)。
rails_helper.rb:
ENV['RAILS_ENV'] ||= 'test'
require File.expand_path('../../config/environment', __FILE__)
require 'spec_helper'
require 'rspec/rails'
Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}

Rails.logger.level = 4

ActiveRecord::Migration.maintain_test_schema!

RSpec.configure do |config|
config.use_transactional_fixtures = true
config.infer_spec_type_from_file_location!

config.include FactoryGirl::Syntax::Methods
config.include Sorcery::TestHelpers::Rails
config.include Macros::Controller::Security
end
FactoryGirl.reload
Shoulda::Matchers.configure do |config|
config.integrate do |with|
with.test_framework :rspec
with.library :rails
end
end
spec_helper.rb:
require 'simplecov_helper'
require 'webmock/rspec'
WebMock.disable_net_connect!(allow_localhost: true)
require 'rspec/collection_matchers'

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
config.run_all_when_everything_filtered = true
config.disable_monkey_patching!
config.expose_dsl_globally = true
config.default_formatter = 'doc' if config.files_to_run.one?
config.order = :random

Kernel.srand config.seed
end

编辑
好的,我认为问题不在于 shoulda-matchers,而在于 active_attr gem ,因为测试仅在 spec/compositions/api 中失败文件夹,我在其中使用 gem。

最佳答案

shoulda-matchers 3.0 有选择地使其匹配器可用。我使用的 ActiveModel 匹配器仅混合到模型规范中 ( af98a23 )。
我有两个选择来解决这个问题:

  • 放置模型的规范,使用 active_attr下的 gem spec/models文件夹;
  • 添加 type: :modelspec/compositions/api 中每个类的顶级描述块文件夹。

  • 我决定采用第二个选项,它奏效了。

    旁注
    现在,以确保( ensure_inclusion_inensure_length_of )开头的匹配器重命名为 validate_inclusion_in , validate_length_of ( 55c8d09 )。

    关于ruby-on-rails - rails/rspec 看不到 shoulda 匹配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33280731/

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