Как мне заглушить / смоделировать вызов в командной строке с помощью rspec?

Я пытаюсь проверить вывод из инструмента командной строки. Как я 'не настоящие' вызов командной строки с помощью rspec? Делать следующее нет работа:

it "should call the command line and return 'text'" do
  @p = Pig.new
  @p.should_receive(:run).with('my_command_line_tool_call').and_return('result text')
end

Как мне создать эту заглушку?

 hgmnz10 нояб. 2009 г., 16:43
Можем ли мы увидеть соответствующие фрагментыPig учебный класс?

Ответы на вопрос(3)

module Kernel
  def system(cmd)
    "call #{cmd}"
  end
end

> system("test")
=> "call test" 

И заслуга в этом вопросе:Макет системного вызова в рубине

 jpatokal29 сент. 2017 г., 02:24
Предположительно, потому что этоне грызть / насмехаться, но на самом делезамена метод. С другой стороны, вы когда-нибудь хотели бы делать реальные системные вызовы в тестах?
 hagello21 июл. 2017 г., 13:49
Почему этот ответ получает так много отрицательных отзывов? Ответ, на который ссылается @jpatokal, имеет 17 голосов!
Решение Вопроса

Вот быстрый пример, который я сделал. Я звонюLs из моего фиктивного класса. Протестировано с rspec

require "rubygems"
require "spec"

class Dummy
  def command_line
    system("ls")
  end
end

describe Dummy do
  it  "command_line should call ls" do
    d = Dummy.new
    d.should_receive("system").with("ls")
    d.command_line
  end
end
 btelles10 нояб. 2009 г., 18:16
Poifect: -) ... Спасибо!
 Automatico04 мар. 2014 г., 14:50
Как это заглушает или издевается над системным вызовом?
 btelles10 нояб. 2009 г., 18:17
Я думаю, что у меня были некоторые другие запредельные ошибки, которые не былиТ даже до запуска / системного вызова.

С использованиемсинтаксис ожидания нового сообщения:

спецификации / dummy_spec.rb
require "dummy"

describe Dummy do
  it "command_line should call ls" do
    d = Dummy.new
    expect(d).to receive(:system).with("ls")
    d.command_line
  end
end
Библиотека / dummy.rb
class Dummy
  def command_line
    system("ls")
  end
end

Ваш ответ на вопрос