#<;的未定义局部变量或方法;RSpec+;Rspec 3.5

#<;的未定义局部变量或方法;RSpec+;Rspec 3.5,rspec,Rspec,堆垛机 在RSPEC中运行此规范时,我一直遇到一个错误。我正在使用: rspec核心(3.5.3) rspec支持(~>3.5.0) rspec期望值(3.5.0) 下面是我正在使用的规范: require 'rails_helper' RSpec.describe Service, type: :model do it "has a valid factory" do expect(service).to be_valid end end 这是工厂女孩的工厂: Factor

堆垛机

在RSPEC中运行此规范时,我一直遇到一个错误。我正在使用:

rspec核心(3.5.3) rspec支持(~>3.5.0) rspec期望值(3.5.0)

下面是我正在使用的规范:

require 'rails_helper'

RSpec.describe Service, type: :model do
  it "has a valid factory" do
    expect(service).to be_valid
  end
end
这是工厂女孩的工厂:

FactoryGirl.define do
  factory :service do
    name        { Faker::Lorem.word }
    description { Faker::Lorem.paragraphs(5) }
  end
end
我有一个服务模型“service.rb”,内容非常简单:

class Service < ApplicationRecord
  validates :name, presence: true
  validates :description, presence: true
end
类服务
最后,这是我一直得到的错误:

故障:
1) 服务具有有效的工厂
失败/错误:期望(服务)。有效
名称错误:
未定义的局部变量或方法“service”#
#./spec/models/service_spec.rb:5:in'block(2层)in'
在0.02976秒内完成(加载文件需要1.52秒)
1例,1例失败
失败的示例:
rspec./spec/models/service_spec.rb:4#服务具有有效的工厂

也许,你必须写下面这样的东西。您需要通过工厂初始化服务实例,以便在规范文件中使用

 RSpec.describe Service, type: :model do
  it "has a valid factory" do
    service = FactoryGirl.create :service
    expect(service).to be_valid
  end
end
更好的方法是在上下文之外构建工厂实例,并在多个测试中使用同一实例

describe 'validate factory' do
  let(:factory) { FactoryGirl.create :service }
  it 'sets the type_id field' do
    expect(service).to be_valid
  end
end

也许,你必须写下面这样的东西。您需要通过工厂初始化服务实例,以便在规范文件中使用

 RSpec.describe Service, type: :model do
  it "has a valid factory" do
    service = FactoryGirl.create :service
    expect(service).to be_valid
  end
end
更好的方法是在上下文之外构建工厂实例,并在多个测试中使用同一实例

describe 'validate factory' do
  let(:factory) { FactoryGirl.create :service }
  it 'sets the type_id field' do
    expect(service).to be_valid
  end
end

任何帮助都将不胜感激!您不应该测试“服务有一个有效的工厂”,这样您就可以测试测试(?)。只需为模型功能添加测试,服务工厂将是所有测试通过的必要条件,您无需测试您的测试配置。任何帮助都将不胜感激!您不应该测试“服务有一个有效的工厂”,这样您就可以测试测试(?)。只需为模型功能添加测试,服务工厂将作为所有测试通过的必要条件而有效,您不需要测试您的测试配置。对于使用本教程的人来说,这就成功了()请注意这一点,否则它会起作用。@user2164689-如果这解决了您的问题,请接受答案。使用FactoryGirl.build而不是FactoryGirl.create来测试验证,速度更快,因为它不写入数据库,并且您不需要持久记录来测试验证。对于使用本教程的人来说,这就成功了()请注意这一点,否则它会起作用。@user2164689-如果这解决了您的问题,请接受答案。使用FactoryGirl.build而不是FactoryGirl.create来测试验证,速度更快,因为它不写入数据库,并且您不需要持久记录来测试验证。