当前位置:  开发笔记 > 开发工具 > 正文

NoMethodError:未定义的方法`validate_presence_of'(Rspec和Shoulda-Matchers)

如何解决《NoMethodError:未定义的方法`validate_presence_of'(Rspec和Shoulda-Matchers)》经验,为你挑选了1个好方法。

我正在尝试设置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.rbspec_helper.rb.

在我的宝石文件中,我有这样的shoulda-matchers宝石:

group :development, :test do
  gem 'shoulda-matchers', require: false
end

你可以帮我设置shoulda-matcher和rspec吗?我在这做错了什么?



1> Artur Olenbe..:

我有类似的问题!我帮助了这个:

# 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

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有