Как мне заглушить / смоделировать вызов в командной строке с помощью rspec? - PullRequest
5 голосов
/ 10 ноября 2009

Я пытаюсь проверить вывод из инструмента командной строки. Как «подделать» вызов командной строки с помощью 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

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

Ответы [ 3 ]

12 голосов
/ 06 июня 2014

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

спецификация / 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
6 голосов
/ 10 ноября 2009

Вот быстрый пример, который я сделал. Я звоню 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
0 голосов
/ 15 мая 2012

Альтернативно, вы можете просто переопределить системный метод ядра:

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

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

И кредит идет на этот вопрос: Макет системного вызова в ruby ​​

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