#<RSpec::ExampleGroups 的未定义局部变量或方法“clientid”

undefined local variable or method `clientid' for #<RSpec::ExampleGroups

我是 factory_girl gem 的新手。我的 Ruby gem 有静态客户端 ID、会话和主机。

我的工厂代码是这样的

FactoryGirl.define  do
 factory :session do |f|
        f.clientid "clientid string"
        f.secret " secret string"
        f.host "host string"
    end
end

我的规格代码是这样的

describe '#new' do
    it 'works' do
      result = FactoryGirl.build(clientid, secret, host)
      expect(result).not_to be_nil
    end
end

我的 spec_helper 文件是

require 'rspec'
require 'factory_girl'
$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
require 'mydemogem'

我正在尝试为此创建一个工厂。但它给了我以下错误:

undefined local variable or method `clientid' for #<RSpec::ExampleGroups::

您的规格有

result = FactoryGirl.build(clientid, secret, host)

但您没有定义 clientidsecrethost。您无法访问未定义的变量

这里有一些解释:

您已定义

factory :session

文件,包含通常称为 sessions_factory.rb 的工厂,因此它被用于生成 session。您可以构建一个:

FactoryGirl.build(:session)

这将调用:

Session.new(clientid: 'clientid string', secret: 'secret string', host: 'host string')

您还可以像这样修改一些属性:

FactoryGirl.build(:session, clientid: 'other id string')

现在,返回的对象将等于:

Session.new(clientid: 'other id string', secret: 'secret string', host: 'host string')

这就是您使用对象工厂的方式。