我正在与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
仅在测试环境中起作用?
答案 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
课程进行任何更改!