gpt4 book ai didi

ruby-on-rails - RSpec 未定义方法 "errors_on"

转载 作者:数据小太阳 更新时间:2023-10-29 07:07:28 24 4
gpt4 key购买 nike

我想使用 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

不幸的是,我的测试失败了:

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 '

gem 文件

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

为什么我得到 undefined method "errors_on" 的任何想法?

最佳答案

errors_on 匹配器移动到 the rspec-collection_matchers gem ,因此将其添加到您的 Gemfile 将修复错误。

如果你想摆脱非核心语法,你可以这样做

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.errors[:title]).to be_empty
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.errors.added?(:title, :blank)).to be_true
end
end

end
end

( have_exactly and related matchers have also moved to rspec-collection_matchers. )

关于ruby-on-rails - RSpec 未定义方法 "errors_on",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24243948/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com