I have the following model that I want to test with RSpec:
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
Unfortunately, I am getting test crashes:
Failures:
1) The title attribute of the language header is valid with the title Error / 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) There is no title for the title, there is an error on the title attribute Error / 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
Any ideas why I get the undefined method "errors_on" ?