2016-10-01 9 views
0

Я использую RSpec для тестирования своих классов на Rails.RSpec - методы тестирования, которые вызывают частные методы, которые следует издеваться

Мне интересно, что является хорошим способом тестирования методов, вызывающих частные методы.

Например, у меня есть этот класс:

Class Config 
    def configuration(overrides) 
    @config.merge(overrides) 
    end 

    private 

    def read_config_from_yml 
    @config ||= YAML.load()... 
    end 
end 

Для тестирования методы конфигурации, мы должны как-то издеваться методом read_config_from_yml. Я знаю, что это нехорошо просто издеваться над личным методом read_config_from_yml или переменной экземпляра @config, потому что это будет возиться с внутренностями объекта.

Что я могу думать на верхней части моей головы:

  1. сделать read_config_from_yml общественного

  2. добавить сеттер метод для конфигурации (чтобы избежать насмехаясь переменной экземпляра)

Эти хаки? Любые другие идеи?

ответ

0

Одной из идей было бы создать копию файла YAML в тесте. Вы можете взять фрагмент файла, который вы используете в своем производственном коде, записать его в ожидаемое местоположение файла и удалить его после завершения теста.

before do 
    File.open(file_path_here, 'w+') do |f| 
    f << <<-eof 
     config: 
     setting1: 'string' 
     setting2: 0 
    eof 
    end 
end 

after do 
    File.delete(file_path_here) 
end 

it 'does the thing' do 
    ... 
end 

Это позволит избежать любых обрезков и позволит вам сохранить свой метод конфиденциальным.

 Смежные вопросы

  • Нет связанных вопросов^_^