我正在尝试设置Rspec和Shoulda-Matchers,但出于某种原因我得到了这个错误:
NoMethodError:#RSpec的未定义方法`validate_presence_of':: ExampleGroups :: AdCampaign :: Validations:0x000000062a2b90>
失败/错误:{should have_many:advertisements}期望#响应
has_many?
NoMethodError:未定义的方法`belongs_to'用于#RSpec :: ExampleGroups :: AdCampaign :: Associations:0x0000000686d8e0>
似乎我尝试了stackoverflow和github问题的每个答案,没有任何帮助.
也许你可以帮我找出我做错了什么?
这是我的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 'rspec/rails' require 'shoulda/matchers' require 'spec_helper' ActiveRecord::Migration.maintain_test_schema! RSpec.configure do |config| config.fixture_path = "#{::Rails.root}/spec/fixtures" config.use_transactional_fixtures = true config.infer_spec_type_from_file_location! config.filter_rails_from_backtrace! end Shoulda::Matchers.configure do |config| config.integrate do |with| with.test_framework :rspec with.library :rails end end
这是我的spec_helper.rb
:
ENV['RAILS_ENV'] ||= 'test' require File.expand_path('../../config/environment', __FILE__) require 'rspec/rails' require 'shoulda/matchers' require 'database_cleaner' require 'capybara/rspec' Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f } ActiveRecord::Migration.check_pending! if defined?(ActiveRecord::Migration) RSpec.configure do |config| config.include Rails.application.routes.url_helpers config.include FactoryGirl::Syntax::Methods config.include(Shoulda::Matchers::ActiveModel, type: :model) config.include(Shoulda::Matchers::ActiveRecord, type: :model) # config.include Shoulda::Matchers::ActiveRecord, type: :model # config.include Devise::TestHelpers, type: :controller config.order = 'random' config.before(:suite) do DatabaseCleaner.strategy = :transaction DatabaseCleaner.clean_with(:truncation) end config.before(:each) do DatabaseCleaner.start end config.after(:each) do DatabaseCleaner.clean end 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 end
heer是我测试的spec文件:
require 'rails_helper' RSpec.describe AdCampaign, type: :model do describe 'validations' do it { should validate_presence_of :shop } it { should validate_presence_of :description } end describe 'associations' do it { should belong_to :shop } it { should have_many :advertisements } it { should have_one :recipient_list } end end
这是我试图测试的模型:
class AdCampaign < ActiveRecord::Base belongs_to :shop has_many :advertisements has_one :recipient_list validates :shop, :description, presence: true end
我试过放在Shoulda::Matchers.configure do...
两个rails_helper.rb
和spec_helper.rb
.
在我的宝石文件中,我有这样的shoulda-matchers
宝石:
group :development, :test do gem 'shoulda-matchers', require: false end
你可以帮我设置shoulda-matcher和rspec吗?我在这做错了什么?
我有类似的问题!我帮助了这个:
# Gemfile group :test do gem "shoulda-matchers", require: false end
这是添加到顶部rspec_helper.rb
require 'shoulda-matchers' require "bundler/setup" ::Bundler.require(:default, :test) ::Shoulda::Matchers.configure do |config| config.integrate do |with| # Choose a test framework: with.test_framework :rspec #with.test_framework :minitest #with.test_framework :minitest_4 #with.test_framework :test_unit # Choose one or more libraries: with.library :active_record with.library :active_model #with.library :action_controller # Or, choose the following (which implies all of the above): #with.library :rails end end