Rails 4.2.4,Rspec 3.3.1,shoulda-matcher 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 #RSpe
我正进入(状态
#... 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> #...
还有更多这类失败(看起来像是不合适的).
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 / composition / api文件夹中失败,我使用gem.
shoulda-matchers 3.0有选择地使其匹配器可用.我使用的ActiveModel匹配器只混合到型号规格中( af98a23).我有两个选择来解决这个问题:
>放置模型的规格,在规格/模型文件夹下使用active_attr gem;
>将type :: model添加到spec / composition / api文件夹中每个类的顶级描述块.
我决定选择第二种选择并且有效.
边注
现在,以ensure(ensure_inclusion_in,ensure_length_of)开头的匹配器将重命名为validate_inclusion_in,validate_length_of(55c8d09).