【问题标题】:How to make attr_accessor work only in testing environment?如何使 attr_accessor 仅在测试环境中工作?
【发布时间】:2012-02-04 03:21:20
【问题描述】:

我正在与 Sinatra 和 RSpec 合作。我在 lib/auth.rb 中有这个

class Person
    attr_accessor :password if ENV['RACK_ENV'] == 'test'
    ....

我想在使用 Rspec 进行测试时执行此代码,但它不起作用。这是我的规范文件:

describe Person
    it 'should match the password' do
        @james = Person.new(foo, 'bar')
        @james.password.should == 'bar'
    end
end

我不希望 @james.password 在此模型之外访问,但能够从 Rspec 文件或在测试环境中访问它。是否有任何代码可以使attr_accessor 仅在测试环境中工作?

【问题讨论】:

    标签: testing rspec sinatra environment


    【解决方案1】:

    您在运行测试时是否真的设置了ENV['RACK_ENV']

    尝试添加

    ENV['RACK_ENV'] = 'test'
    

    到您的测试文件的开头。

    【讨论】:

    • 哇...它的工作。谢谢马特。我不知道 ENV['RACK_ENV'] 是否为零。
    【解决方案2】:

    我知道这是一个老问题,但您可以使用instance_variable_get,而不是尝试编辑您的代码以进行测试。
    因此,您的规范将如下所示:

    describe Person
      it 'should match the password' do
        @james = Person.new(foo, 'bar')
        @james.instance_variable_get(:@password).should == 'bar'
      end
    end
    

    而且它不需要对您的 Person 类进行任何更改!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-28
      • 1970-01-01
      • 1970-01-01
      • 2023-04-11
      相关资源
      最近更新 更多