과 같은 방법을 기대 :RSpec에 허용하고 다른 인수 :: Service.run 두 번 내부
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
내가의 두 번째 통화에 제공하는 인수를 테스트 할 메서드 : 첫 번째 인수 'step2'를 사용하여 실행 동일한 메서드의 첫 번째 호출을 무시하려면 : 첫 번째 인수는 'step1'이지만 무시하십시오.
나는 RSpec에 테스트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
가지고 있지만 어떻게 정확히 같은 방법을 허용 사용하고 기대하는 오류
expected: "step2"
got: "step1"
(compared using ==)
있어?
기대를 누락 것 같다, 그래서. 그냥'expect (Temp :: Service) .to ('step2', "arg3"=> "v3") {true}'를 받아 (: run) .with를 사용하십시오. – fanta
두 번째 인수보다 더 복잡한 검사를하고 싶습니다. 그래서 나는 그것을 블록으로 만들었다. 이와같이 ' [ 'arg3', 'arg4']. each do | arg_good | expect (p [arg_good]). not_to be_nil 끝 ' –