Как заставить attr_accessor работать только в тестовой среде? - PullRequest
1 голос
/ 04 февраля 2012

Я работаю с Синатрой и 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 работал только в тестовой среде?

Ответы [ 2 ]

1 голос
/ 09 февраля 2012

Вы действительно устанавливаете ENV['RACK_ENV'] при запуске ваших тестов?

Попробуйте добавить

ENV['RACK_ENV'] = 'test'

в начало вашего файла теста.

0 голосов
/ 27 октября 2017

Я знаю, что это старый вопрос, но вместо того, чтобы пытаться редактировать свой код для работы в тесте, вы можете использовать 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 классе!

...