2009-11-10 20 views
5

Estoy tratando de probar la salida desde una herramienta de línea de comandos. ¿Cómo puedo 'falsificar' una llamada de línea de comando con rspec? Hacer lo siguiente no funciona:¿Cómo puedo rescindir/simular una llamada a la línea de comando con 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 

¿Cómo puedo crear ese talón?

+0

Podemos ver las piezas relevantes de la clase 'Pig'? – hgmnz

Respuesta

6

Aquí hay un ejemplo rápido que hice. Llamo al ls de mi clase ficticia. Probado con 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

Poifect: -) ... ¡Gracias! – btelles

+0

Creo que tuve otros errores prohibitivos que ni siquiera llegaban a la llamada de ejecución/sistema. – btelles

+8

¿Cómo se llama el sistema o se burla del sistema? – Automatico

-5

alternativa, sólo podría redefinir el método del sistema Kernel:

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

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

Y el mérito es de esta pregunta: Mock system call in ruby

+1

¿Por qué esta respuesta recibe tantos downvotes? ¡La respuesta a la que @jpatokal se refiere tiene 17 votos ascendentes! – hagello

+0

Presumiblemente porque no se trata de troquelar/burlarse, pero en realidad * reemplazar * el método. Por otra parte, ¿alguna vez querría hacer llamadas al sistema reales en las pruebas? – jpatokal

11

Utilizando el new message expectation syntax: especificación

/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 
Cuestiones relacionadas