Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails RSpec未定义方法“;“关于”的错误;_Ruby On Rails_Ruby_Rspec_Rspec Rails_Rspec3 - Fatal编程技术网

Ruby on rails RSpec未定义方法“;“关于”的错误;

Ruby on rails RSpec未定义方法“;“关于”的错误;,ruby-on-rails,ruby,rspec,rspec-rails,rspec3,Ruby On Rails,Ruby,Rspec,Rspec Rails,Rspec3,我想用RSpec测试以下模型: class Language < ActiveRecord::Base has_and_belongs_to_many :dvds validates :title, presence: true, uniqueness: { case_sensitive: false } end 不幸的是,我遇到了测试失败: 失败: 1) 语言标题验证标题存在对存在有效 标题 失败/错误:期望(@lang).正好有(0)。错误发生在(:title) 命名错误:

我想用RSpec测试以下模型:

class Language < ActiveRecord::Base
  has_and_belongs_to_many :dvds
  validates :title, presence: true, uniqueness: { case_sensitive: false }
end
不幸的是,我遇到了测试失败:

失败:

1) 语言标题验证标题存在对存在有效 标题 失败/错误:期望(@lang).正好有(0)。错误发生在(:title) 命名错误: 未定义的方法
错误\u on'for#
#./spec/models/language_spec.rb:9:in
块(4级)in'

2) 语言标题验证标题不存在在上有错误 标题属性 失败/错误:期望(@lang).在(:title)上正好有(1)个错误 命名错误: 未定义的方法
错误\u on'for#
#./spec/models/language_spec.rb:19:in
块(4级)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

你知道我为什么会在“”上出现
未定义的方法“errors”?

尝试设置类型选项:

describe Language, type: :model do
或者使用
从文件位置推断规格类型(请参阅)


matcher上的
errors\u已移动到,因此将其添加到GEM文件将修复错误

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

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

()

Rspec 3中没有这样的匹配器。也许会有帮助。是的,没错。但是我的错误信息有点不同,所以我想可能还有别的原因。在我的情况下,我必须添加到我的gem文件:
gem'rspec-collection\u matchers'
RSpec.configure do |config|
  config.infer_spec_type_from_file_location!
end
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