Ich möchte, dass meine Methode testen, die Methode Temp läuft :: Service.run zweimal im Inneren:Rspec lassen und erwarten, dass die gleiche Methode mit verschiedenen Argumenten
module Temp
class Service
def self.do_job
# first call step 1
run("step1", {"arg1"=> "v1", "arg2"=>"v2"})
# second call step 2
run("step2", {"arg3"=> "v3"})
end
def self.run(name, p)
# do smth
return true
end
end
end
Ich möchte Argumente zweiten Aufruf zur Verfügung gestellt testen, von Methode: mit dem ersten Argument 'step2' ausführen, während ich den ersten Aufruf der gleichen Methode ignorieren möchte: run aber mit dem ersten Argument 'step1'.
Ich habe den RSpec Test
RSpec.describe "My spec", :type => :request do
describe 'method' do
it 'should call' do
# skip this
allow(Temp::Service).to receive(:run).with('step1', anything).and_return(true)
# check this
expect(Temp::Service).to receive(:run) do |name, p|
expect(name).to eq 'step2'
# check p
expect(p['arg3']).not_to be_nil
end
# do the job
Temp::Service.do_job
end
end
end
aber ich habe Fehler
expected: "step2"
got: "step1"
(compared using ==)
Wie richtig verwenden, um das gleiche Verfahren zu ermöglichen und erwarten?
Erwartungen fehlen die Parameter für Sie geschickt überprüfen, so, Sie brauchen nicht zu tun, was Sie in dem Block tun. Verwenden Sie 'expect (Temp :: Service) .zu empfangen (: run) .with ('step2'," arg3 "=>" v3 ") {true}'. – fanta
Ich möchte das zweite Argument komplizierter überprüfen. Also habe ich es mit Block gemacht. So ' ['arg3', 'arg4']. Jeder tun | arg_good | erwarten (p [arg_good]). Not_to be_nil Ende' –