Ruby - метод обратных загибов FlexMock - PullRequest
3 голосов
/ 28 октября 2009

У меня есть код Ruby, который использует обратные ссылки в нескольких местах и ​​хочу проверить его. Я использую FlexMock и хочу как-то высмеять этот метод. Я знаю, что метод Kernel,: `, но не могу заставить его работать с FlexMock. Как бы вы это сделали? Вот пример метода, который я хочу проверить:

def foo
  result = `ls`
  if result.to_a.length > 0
    true
  else
    false
  end
end

Ответы [ 3 ]

3 голосов
/ 29 октября 2009

Таким образом, оказывается, что метод backticks специально сопоставляется с Kernel`, что нормально, пока вы не посмотрите на источник FlexMock, чтобы увидеть то, что они считают допустимыми именами методов. Регулярное выражение, которое они используют по существу, проверяет буквенно-цифровые символы с? или же ! в конце, так что backtick не соответствует этому регулярному выражению.

Изменение кода внутренне разрешает исходное исключение, которое выдается, но фактически не заставляет код работать как задумано. Я мог бы сделать это, как предложил Pierr, но это было бы крайне повторяющимся в моем тестовом коде, поэтому я пошел альтернативным путем и просто создал в своей библиотеке библиотечный метод, который выполняет только обратные ссылки. Затем этот метод можно смоделировать нужным образом, и поскольку я использую обратные пометки только в небольшом количестве мест, мне не пришлось менять большую часть моего базового кода.

1 голос
/ 28 октября 2009

Я ничего не знаю о flexmock, но вы можете посмотреть на это .

0 голосов
/ 12 ноября 2009

Вам следует позвонить

Kernel.` "cmd" 

вместо использования

  `cmd` 

в вашем коде. Тогда вы можете проверить, как это:

it "should call system ls" do
  Kernel.should_receive(:`).with("ls")
  Kernel.` "ls"
end

этот пример использует чистый rspec

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...