Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I stub/mock a call to the command line with rspec?

I'm trying to test output from a command line tool. How do I 'fake' a command line call with rspec? Doing the following doesn't work:

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

How do I create that stub?

like image 342
btelles Avatar asked Nov 10 '09 15:11

btelles


2 Answers

Using the new message expectation syntax:

spec/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

lib/dummy.rb

class Dummy
  def command_line
    system("ls")
  end
end
like image 190
HectorPerez Avatar answered Sep 24 '22 21:09

HectorPerez


Here is a quick example I made. I call ls from my dummy class. Tested with 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
like image 25
Aurélien Bottazini Avatar answered Sep 23 '22 21:09

Aurélien Bottazini