Tôi có theo mô hình mà tôi muốn thử nghiệm với RSpec:RSpec phương pháp xác định "errors_on"
class Language < ActiveRecord::Base
has_and_belongs_to_many :dvds
validates :title, presence: true, uniqueness: { case_sensitive: false }
end
language_spec.rb
describe Language do
describe 'title validation' do
context 'title is present' do
before(:each) do
@lang = Language.new(title: 'English')
end
it 'is valid with present title' do
expect(@lang).to have_exactly(0).errors_on(:title)
end
end
context 'title is not present' do
before(:each) do
@lang = Language.create
end
it 'has an error on title attribute' do
expect(@lang).to have_exactly(1).errors_on(:title)
end
end
end
end
Đáng tiếc là tôi nhận được thất bại thử nghiệm:
Failures:
1) Language title validation title is present is valid with present title Failure/Error: expect(@lang).to have_exactly(0).errors_on(:title) NoMethodError: undefined method
errors_on' for #<Language:0xaa40e98> # ./spec/models/language_spec.rb:9:in
block (4 levels) in '2) Language title validation title is not present has an error on title attribute Failure/Error: expect(@lang).to have_exactly(1).errors_on(:title) NoMethodError: undefined method
errors_on' for #<Language id: nil, title: nil, created_at: nil, updated_at: nil> # ./spec/models/language_spec.rb:19:in
block (4 levels) in '
Gemfile
source 'https://rubygems.org'
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.1.1'
# Use sqlite3 as the database for Active Record
gem 'sqlite3'
# Use SCSS for stylesheets
gem 'sass-rails', '~> 4.0.3'
# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0'
# Use CoffeeScript for .js.coffee assets and views
gem 'coffee-rails', '~> 4.0.0'
# See https://github.com/sstephenson/execjs#readme for more supported runtimes
# gem 'therubyracer', platforms: :ruby
# Use jquery as the JavaScript library
gem 'jquery-rails'
# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks
gem 'turbolinks'
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder', '~> 2.0'
# bundle exec rake doc:rails generates the API under doc/api.
gem 'sdoc', '~> 0.4.0', group: :doc
# Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
gem 'spring', group: :development
# Pagination plugin
gem 'will_paginate', '~> 3.0'
# Testing
group :development, :test do
gem "rspec-rails", "~> 3.0.1"
gem "factory_girl_rails", "~> 4.4.1"
end
group :test do
gem "faker", "~> 1.3.0"
gem "capybara", "~> 2.3.0"
gem "database_cleaner", "~> 1.3.0"
gem "launchy", "~> 2.4.2"
gem "selenium-webdriver", "~> 2.42.0"
end
Bất kỳ ý tưởng nào tại sao tôi nhận được undefined method "errors_on"
?
Không có khớp như vậy trong rspec 3. Có lẽ [này] (https: // github.com/rspec/rspec-rails/issues/948#issuecomment-44097307) sẽ hữu ích. – zishe
Vâng, chính xác. Nhưng thông báo lỗi của tôi hơi khác một chút, vì vậy tôi nghĩ có thể có một thứ khác. Trong tình huống của tôi, tôi phải thêm vào Gemfile của mình: 'gem' rspec-collection_matchers'' – Bounce