Тестирование RUBY_PLATFORM с помощью RSpec 2

Есть ли способ изменить константу RUBY_PLATFORM, чтобы я мог протестировать следующий метод с RSpec2?

def determine_os
  case RUBY_PLATFORM
    when /darwin/ then :mac
    when /linux/ then :linux
    else raise InvalidOSError
  end
end

person ezkl    schedule 27.03.2011    source источник


Ответы (2)


RUBY_PLATFORM не следует использовать для определения операционной системы. Вместо этого используйте соответствующий элемент в хеше RbConfig.

Кроме того, если вы хотите, чтобы его было легче протестировать, вы можете сделать

def determine_os(os_string)
  case os_string
    when /darwin/ then :mac
    when /linux/ then :linux
    else raise InvalidOSError
  end
end

и вы можете сделать determine_os("darwin") для своего теста.

person Andrew Grimm    schedule 27.03.2011
comment
Спасибо, @AndrewGrimm! RbConfig['host_os'] кажется лучшим способом доступа к этой информации. Я также обнаружил, что предложенное вами изменение #determine_os значительно облегчило тестирование. Аналогичным образом я скорректировал несколько других методов. - person ezkl; 29.03.2011

Просто установите его. (будет генерировать предупреждения, игнорируйте их)

RUBY_PLATFORM = "darwin"
determine_os              #=> :mac
RUBY_PLATFORM = "mingw"
determine_os              #=> raises InvalidOSError
person Guilherme Bernal    schedule 27.03.2011
comment
Ха-ха. Спасибо. Это первое, что я попробовал, но в моем тесте была другая проблема, которая, как я полагал, была связана с предупреждениями. - person ezkl; 27.03.2011