File: double_spec.rb

package info (click to toggle)
ruby-bogus 0.1.5-3
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 828 kB
  • ctags: 628
  • sloc: ruby: 4,124; makefile: 6; sh: 2
file content (84 lines) | stat: -rw-r--r-- 2,257 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
require 'spec_helper'

module Bogus
  describe Double do
    shared_examples_for "double behavior" do
      it "tracks existence of test doubles" do
        mock(double_tracker).track(object)

        double.stub.foo("a", "b") { "the result" }
      end

      it "does not track existence of the double if verify fails" do
        stub(verifies_stub_definition).verify!(object, :foo, ["a", "b"]) { raise NameError }

        expect {
          double.stub.foo("a", "b") { "the result" }
        }.to raise_error

        expect(double_tracker).not_to have_received.track(object)
      end

      it "verifies stub definition" do
        mock(verifies_stub_definition).verify!(object, :foo, ["a", "b"])

        double.stub.foo("a", "b") { "the result" }
      end

      it "stubs shadow methods" do
        object.extend RecordInteractions
        mock(object.__shadow__).stubs(:foo, "a", "b")

        double.stub.foo("a", "b") { "the result" }
      end

      it "mocks shadow methods" do
        object.extend RecordInteractions
        mock(object.__shadow__).mocks(:foo, "a", "b")

        double.mock.foo("a", "b") { "the result" }
      end

      it "adds method overwriting" do
        double.stub.foo("a", "b") { "the result" }

        expect(overwrites_methods.overwrites).to eq([[object, :foo]])
      end

      it "records double interactions" do
        mock(records_double_interactions).record(object, :foo, ["a", "b"])

        double.stub.foo("a", "b") { "the result" }
      end
    end

    let(:double_tracker) { stub(track: nil) }
    let(:verifies_stub_definition) { stub(verify!: nil) }
    let(:records_double_interactions) { stub(record: nil) }
    let(:overwrites_methods) { FakeMethodOverwriter.new }
    let(:double) { isolate(Double) }

    context "with regular objects" do
      let(:object) { Samples::Foo.new }

      include_examples "double behavior"
    end

    context "with fakes" do
      let(:object) { Samples::FooFake.new }

      include_examples "double behavior"
    end

    class FakeMethodOverwriter
      def overwrite(object, method)
        overwrites << [object, method]
        object.extend RecordInteractions
      end

      def overwrites
        @overwrites ||= []
      end
    end
  end
end