#<;的未定义局部变量或方法;RSpec+;Rspec 3.5
堆垛机 在RSPEC中运行此规范时,我一直遇到一个错误。我正在使用: rspec核心(3.5.3) rspec支持(~>3.5.0) rspec期望值(3.5.0) 下面是我正在使用的规范:#<;的未定义局部变量或方法;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
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来测试验证,速度更快,因为它不写入数据库,并且您不需要持久记录来测试验证。