thoughtbot--shoulda-matchers/spec/unit/shoulda/matchers/doublespeak/object_double_spec.rb

78 lines
2.1 KiB
Ruby

require 'doublespeak_spec_helper'
module Shoulda::Matchers::Doublespeak
describe ObjectDouble do
it 'responds to any method' do
double = described_class.new
expect(double.respond_to?(:foo)).to be true
expect(double.respond_to?(:bar)).to be true
expect(double.respond_to?(:baz)).to be true
end
it 'returns nil from any method call' do
double = described_class.new
expect(double.foo).to be nil
expect(double.bar).to be nil
expect(double.baz).to be nil
end
it 'records every method call' do
double = described_class.new
block = -> { :some_return_value }
double.foo
double.bar(42)
double.baz(:zing, :zang, &block)
expect(double.calls.size).to eq 3
double.calls[0].tap do |call|
expect(call.args).to eq []
expect(call.block).to eq nil
end
double.calls[1].tap do |call|
expect(call.args).to eq [42]
expect(call.block).to eq nil
end
double.calls[2].tap do |call|
expect(call.args).to eq [:zing, :zang]
expect(call.block).to eq block
end
end
describe '#calls_to' do
it 'returns all of the invocations of the given method and their arguments/block' do
double = described_class.new
block = -> { :some_return_value }
double.foo
double.foo(42)
double.foo(:zing, :zang, &block)
double.some_other_method(:doesnt_matter)
calls = double.calls_to(:foo)
expect(calls.size).to eq 3
calls[0].tap do |call|
expect(call.args).to eq []
expect(call.block).to eq nil
end
calls[1].tap do |call|
expect(call.args).to eq [42]
expect(call.block).to eq nil
end
calls[2].tap do |call|
expect(call.args).to eq [:zing, :zang]
expect(call.block).to eq block
end
end
it 'returns an empty array if the given method was never called' do
double = described_class.new
expect(double.calls_to(:unknown_method)).to eq []
end
end
end
end