spec/em-dextras/spec/spy_spec.rb in em-dextras-0.2.0 vs spec/em-dextras/spec/spy_spec.rb in em-dextras-0.3.0

- old
+ new

@@ -1,58 +1,157 @@ require 'spec_helper' describe EMDextras::Spec::Spy do subject { described_class.new } + describe :"called?" do it "should record calls" do subject.foo(1, :a => "b") - + subject.called?(:foo, 1, :a => "b").should be_true subject.called?(:bar, 1, :a => "b").should be_false subject.called?(:foo, 1, :a => "c").should be_false - end + end end describe "default return value" do it "returns nil if no default return value is defined" do - spy = EMDextras::Spec::Spy.new + spy = EMDextras::Spec::Spy.new spy.some_method.should == nil end it "returns the default value if defined" do spy = EMDextras::Spec::Spy.new :default_return => "default" spy.some_method.should == "default" end end + + describe :respond_to? do + context 'without respond parameter' do + let(:spy) { described_class.new } + + it 'always returns true' do + spy.respond_to?(:method_name).should be_true + end + end + + context 'with respond parameter on initialize' do + let(:spy) { described_class.new only_respond_to: [:foo] } + + context 'and asking if it respond for the same method of initialize' do + it 'returns true' do + spy.respond_to?(:foo).should be_true + end + end + + context 'and asking if it respond for the a method different of the initialize' do + it 'returns false' do + spy.respond_to?(:bar).should be_false + end + end + end + end + describe :received_call! do it "should do nothing if the call was really received" do - EM.run do + EM.run do subject.foo(1, :a => "b") subject.received_call!(:foo, 1, :a => "b") end end it "should raise an exception if the call was not received" do expect { - EM.run do + EM.run do subject.foo(1, :a => "b") - + subject.received_call!(:bar, 1, :a => "b") end }.to raise_error(/bar.*foo/) end + context " - rspec argument matchers - " do + it "should accept rspec specific argument matchers" do + subject.foo(1, "banana") + + EM.run { subject.received_call!(:foo, 1, /ba(na)*/) } #doesn't raise + EM.run { subject.received_call!(:foo, 1, instance_of(String)) } #doesn't raise + expect {EM.run { subject.received_call!(:foo, 1, /apple/) } }.to raise_error + end + + it "should accept rspec general matchers" do + subject.foo(1, "banana") + + EM.run { subject.received_call!(:foo, any_args) } #doesn't raise + end + end + + it "should be able to assert that a method will receive nil" do + EM.run do + subject.foobar(nil) + + subject.received_call!(:foobar, nil) + end + end + context "when the method is triggered asynchronously" do it "should should probe until the call is received" do EM.run do - EM.next_tick do + EM.next_tick do subject.foo(1,2,3) end - + subject.received_call!(:foo, 1,2,3) end end end end + describe :received_n_calls! do + it "should do nothing if the call was received the given number of tiems" do + EM.run do + subject.foo(42, :a => "b") + subject.foo(42, :a => "b") + + subject.received_n_calls!(2, :foo, 42, :a => "b") + end + end + + it "should raise an exception if the call was not received" do + expect { + EM.run do + subject.received_n_calls!(1, :bar, :a => "b") + end + }.to raise_error(/1.*0/) + end + + it "should raise an exception if the call was received a number of times less than what was expected" do + expect { + EM.run do + subject.foo(:a => "b") + + subject.received_n_calls!(2, :foo, :a => "b") + end + }.to raise_error(/2.*1/) + end + + end + + describe :not_received_call! do + it 'does not be called' do + EM.run do + subject.not_received_call!(:foo, a: 'b') + end + end + + it 'raises an exception if the call was received' do + expect { + EM.run do + subject.foo(a: 'b') + + subject.not_received_call!(:foo, a: 'b') + end + }.to raise_error + end + end end