【问题标题】:undefined local variable or method `clientid' for #<RSpec::ExampleGroups#<RSpec::ExampleGroups 的未定义局部变量或方法“clientid”
【发布时间】:2015-01-23 19:30:25
【问题描述】:

我是 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::

【问题讨论】:

    标签: ruby rspec rspec-rails


    【解决方案1】:

    这里有一些解释:

    你已经定义了

    factory :session
    

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

    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')
    

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

    【讨论】:

      【解决方案2】:

      你的规格有

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

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

      【讨论】:

      • 我已经在 factory.rb 中定义了...我还缺少什么让我知道...谢谢 FactoryGirl.define do factory :session do |f| f.clientid "clientid string" f.secret "secret string" f.host "host string" end end
      • 您已在 factory.rb 中为这些属性定义了默认值,但您尚未在此处定义您尝试使用的局部变量。在这种情况下,您应该可以不带任何参数地调用 build
      猜你喜欢
      • 2014-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多