如何让attr_accessor只在测试环境中工作?

时间:2012-02-04 03:21:20

标签: testing rspec sinatra environment

我正在与Sinatra和RSpec合作。我在lib / auth.rb

中有这个
class Person
    attr_accessor :password if ENV['RACK_ENV'] == 'test'
    ....

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

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

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

2 个答案:

答案 0 :(得分:1)

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

尝试添加

ENV['RACK_ENV'] = 'test'

到测试文件的开头。

答案 1 :(得分:0)

我知道这是一个老问题,但您可以使用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课程进行任何更改!