active_mocker 1.2 → 1.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/README.md +61 -25
- data/Rakefile +1 -1
- data/active_mocker.gemspec +3 -3
- data/lib/active_hash/init.rb +13 -22
- data/lib/active_mocker.rb +1 -0
- data/lib/active_mocker/active_record/unknown_class_method.rb +1 -1
- data/lib/active_mocker/active_record/unknown_module.rb +3 -3
- data/lib/active_mocker/collection_association.rb +19 -20
- data/lib/active_mocker/config.rb +7 -4
- data/lib/active_mocker/field.rb +4 -4
- data/lib/active_mocker/generate.rb +75 -18
- data/lib/active_mocker/logger.rb +10 -1
- data/lib/active_mocker/mock_class_methods.rb +12 -2
- data/lib/active_mocker/mock_instance_methods.rb +3 -2
- data/lib/active_mocker/mock_requires.rb +2 -1
- data/lib/active_mocker/mock_template.erb +25 -22
- data/lib/active_mocker/public_methods.rb +6 -2
- data/lib/active_mocker/version.rb +1 -1
- data/sample_app_rails_4/app/models/micropost.rb +0 -2
- data/sample_app_rails_4/bin/rspec +16 -0
- data/sample_app_rails_4/config/application.rb +0 -3
- data/sample_app_rails_4/config/database.yml +5 -6
- data/sample_app_rails_4/config/environments/development.rb +0 -2
- data/sample_app_rails_4/config/environments/test.rb +0 -1
- data/sample_app_rails_4/config/initializers/active_mocker.rb +7 -5
- data/sample_app_rails_4/db/migrate/20130311191400_create_users.rb +1 -1
- data/sample_app_rails_4/db/migrate/20130315015932_add_admin_to_users.rb +1 -1
- data/sample_app_rails_4/db/schema.rb +4 -3
- data/sample_app_rails_4/lib/tasks/{mocks.rake → active_mocker.rake} +5 -5
- data/sample_app_rails_4/lib/unit_logger.rb +22 -0
- data/sample_app_rails_4/spec/compare_mocker_and_record_spec.rb +110 -4
- data/sample_app_rails_4/spec/mocks/micropost_mock.rb +31 -27
- data/sample_app_rails_4/spec/mocks/relationship_mock.rb +29 -24
- data/sample_app_rails_4/spec/mocks/user_mock.rb +69 -58
- data/sample_app_rails_4/spec/spec_helper.rb +6 -7
- data/sample_app_rails_4/spec/user_mock_spec.rb +14 -7
- data/spec/lib/active_mocker/collection_association_spec.rb +17 -3
- data/spec/lib/active_mocker/generate_spec.rb +8 -6
- data/spec/lib/active_mocker/model_reader_spec.rb +5 -0
- data/spec/lib/active_mocker/schema_reader_spec.rb +1 -1
- data/spec/lib/readme_spec.rb +199 -205
- data/spec/unit_logger.rb +24 -0
- metadata +22 -32
- data/mocks/micropost_mock.rb +0 -108
- data/mocks/relationship_mock.rb +0 -109
- data/mocks/user_mock.rb +0 -199
- data/plan_mock.rb +0 -2323
- data/sample_app_rails_4/config/cucumber.yml +0 -8
- data/sample_app_rails_4/db/development.sqlite3 +0 -0
- data/sample_app_rails_4/db/test.sqlite3 +0 -0
- data/spec/lib/active_mocker/performance/base_spec.rb +0 -454
- data/spec/lib/active_mocker/performance/large_schema.rb +0 -3576
- data/spec/lib/active_mocker/performance/migration/20140327205359_migration.rb +0 -0
- data/spec/lib/active_mocker/performance/schema_reader_spec.rb +0 -96
- data/spec/lib/compare_mocker_and_record_spec.rb +0 -133
@@ -1,9 +1,8 @@
|
|
1
|
-
|
1
|
+
ENV["RAILS_ENV"] ||= 'test'
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
require 'rspec/autorun'
|
3
|
+
require File.expand_path("../../config/environment", __FILE__)
|
4
|
+
require 'rspec/rails'
|
5
|
+
require 'rspec/autorun'
|
7
6
|
|
8
7
|
# Requires supporting ruby files with custom matchers and macros, etc,
|
9
8
|
# in spec/support/ and its subdirectories.
|
@@ -11,9 +10,9 @@ require 'rubygems'
|
|
11
10
|
|
12
11
|
# Checks for pending migrations before tests are run.
|
13
12
|
# If you are not using ActiveRecord, you can remove this line.
|
14
|
-
|
13
|
+
ActiveRecord::Migration.maintain_test_schema!
|
15
14
|
|
16
|
-
|
15
|
+
RSpec.configure do |config|
|
17
16
|
# ## Mock Framework
|
18
17
|
#
|
19
18
|
# If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
|
@@ -1,15 +1,21 @@
|
|
1
1
|
require 'rspec'
|
2
|
-
$:.unshift File.expand_path('
|
3
|
-
|
2
|
+
$:.unshift File.expand_path('../../', __FILE__)
|
3
|
+
APP_ROOT = File.expand_path('../../', __FILE__)
|
4
|
+
|
5
|
+
require 'config/initializers/active_mocker.rb'
|
6
|
+
load 'spec/mocks/user_mock.rb'
|
4
7
|
|
5
8
|
describe UserMock do
|
6
9
|
|
7
|
-
before(:each){
|
10
|
+
before(:each){
|
11
|
+
ActiveMocker::Generate.new
|
12
|
+
UserMock.clear_mock
|
13
|
+
}
|
8
14
|
|
9
15
|
describe '::column_names' do
|
10
16
|
|
11
17
|
it 'returns an array of column names found from the schema.rb file' do
|
12
|
-
expect(UserMock.column_names).to eq(["id", "name", "email", "created_at", "updated_at", "password_digest", "remember_token", "admin"])
|
18
|
+
expect(UserMock.column_names).to eq(["id", "name", "email", "credits", "created_at", "updated_at", "password_digest", "remember_token", "admin"])
|
13
19
|
end
|
14
20
|
|
15
21
|
end
|
@@ -23,7 +29,7 @@ describe UserMock do
|
|
23
29
|
end
|
24
30
|
|
25
31
|
it 'will raise error if not an attribute or association' do
|
26
|
-
expect{UserMock.new(baz: "Hello")}.to raise_error('
|
32
|
+
expect{UserMock.new(baz: "Hello")}.to raise_error(ActiveMocker::RejectedParams, '{:baz=>"Hello"} for UserMock')
|
27
33
|
end
|
28
34
|
|
29
35
|
end
|
@@ -36,13 +42,14 @@ describe UserMock do
|
|
36
42
|
end
|
37
43
|
|
38
44
|
it 'add has_many relationship' do
|
39
|
-
|
40
45
|
expect(UserMock.new.microposts.class).to eq ActiveMocker::CollectionAssociation
|
41
46
|
expect(UserMock.new.microposts.count).to eq 0
|
42
47
|
mock_inst = UserMock.new
|
43
48
|
mock_inst.microposts << 1
|
44
49
|
expect(mock_inst.microposts.count).to eq 1
|
45
|
-
|
50
|
+
mock_inst.microposts << 1
|
51
|
+
expect(mock_inst.microposts.count).to eq 2
|
52
|
+
expect(mock_inst.microposts.to_a).to eq [1, 1]
|
46
53
|
end
|
47
54
|
|
48
55
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'rspec'
|
2
2
|
$:.unshift File.expand_path('../../', __FILE__)
|
3
|
+
require 'active_support/all'
|
3
4
|
require 'active_mocker/collection_association'
|
4
5
|
require 'ostruct'
|
5
6
|
|
@@ -13,7 +14,6 @@ describe ActiveMocker::CollectionAssociation do
|
|
13
14
|
it 'sum values by attribute name' do
|
14
15
|
|
15
16
|
subject << [OpenStruct.new(value: 1), OpenStruct.new(value: 1)]
|
16
|
-
|
17
17
|
expect(subject.sum(:value)).to eq 2
|
18
18
|
|
19
19
|
end
|
@@ -25,7 +25,6 @@ describe ActiveMocker::CollectionAssociation do
|
|
25
25
|
it 'will add a single item to the array' do
|
26
26
|
|
27
27
|
subject << "item"
|
28
|
-
|
29
28
|
expect(subject.count).to eq 1
|
30
29
|
expect(subject.first).to eq 'item'
|
31
30
|
|
@@ -34,7 +33,6 @@ describe ActiveMocker::CollectionAssociation do
|
|
34
33
|
it 'will add a many item to the array' do
|
35
34
|
|
36
35
|
subject << ['item1', 'item2', 'item3']
|
37
|
-
|
38
36
|
expect(subject.count).to eq 3
|
39
37
|
expect(subject).to eq ['item1', 'item2', 'item3']
|
40
38
|
|
@@ -74,6 +72,22 @@ describe ActiveMocker::CollectionAssociation do
|
|
74
72
|
|
75
73
|
end
|
76
74
|
|
75
|
+
end
|
76
|
+
|
77
|
+
describe 'each' do
|
78
|
+
|
79
|
+
it 'works' do
|
80
|
+
expect(described_class.new([1,2]).each{|a| a + a}).to eq [1, 2]
|
81
|
+
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
85
|
+
|
86
|
+
describe 'map' do
|
87
|
+
|
88
|
+
it 'works' do
|
89
|
+
expect(described_class.new([1, 2]).map { |a| a + a }).to eq [2, 4]
|
90
|
+
end
|
77
91
|
|
78
92
|
end
|
79
93
|
|
@@ -20,18 +20,20 @@ require 'active_support/all'
|
|
20
20
|
require 'active_hash/ar_api'
|
21
21
|
require 'active_mocker/generate'
|
22
22
|
require 'erb'
|
23
|
+
require 'virtus'
|
24
|
+
require_relative '../../unit_logger'
|
23
25
|
|
24
26
|
describe ActiveMocker::Generate do
|
25
27
|
|
26
28
|
before(:each) do
|
27
|
-
|
29
|
+
app_root = File.expand_path('../../../../', __FILE__)
|
28
30
|
ActiveMocker.config do |config|
|
29
31
|
# Required Options
|
30
|
-
config.schema_file = File.join(
|
31
|
-
config.model_dir = File.join(
|
32
|
-
config.mock_dir = File.join(
|
33
|
-
|
34
|
-
|
32
|
+
config.schema_file = File.join(app_root, 'sample_app_rails_4/db/schema.rb')
|
33
|
+
config.model_dir = File.join(app_root, 'sample_app_rails_4/app/models')
|
34
|
+
config.mock_dir = File.join(app_root, 'sample_app_rails_4/spec/mocks')
|
35
|
+
config.logger = UnitLogger
|
36
|
+
|
35
37
|
end
|
36
38
|
|
37
39
|
end
|
@@ -9,9 +9,14 @@ require 'active_mocker/logger'
|
|
9
9
|
require 'active_mocker/active_record'
|
10
10
|
require 'active_mocker/model_reader'
|
11
11
|
require 'active_mocker/reparameterize'
|
12
|
+
require_relative '../../unit_logger'
|
12
13
|
|
13
14
|
describe ActiveMocker::ModelReader do
|
14
15
|
|
16
|
+
before(:all) do
|
17
|
+
ActiveMocker::Logger.set(UnitLogger)
|
18
|
+
end
|
19
|
+
|
15
20
|
let(:subject){ described_class.new({model_dir: File.expand_path('../../', __FILE__)}).parse('model') }
|
16
21
|
|
17
22
|
describe '#parse' do
|
@@ -99,7 +99,7 @@ describe ActiveMocker::SchemaReader do
|
|
99
99
|
|
100
100
|
it 'returns all fields from schema' do
|
101
101
|
tables
|
102
|
-
expect(subject.tables.first.fields[1].to_h).to eq({:name=>"company_id", :type=>:integer, :options=>
|
102
|
+
expect(subject.tables.first.fields[1].to_h).to eq({:name=>"company_id", :type=>:integer, :options=>{}})
|
103
103
|
end
|
104
104
|
|
105
105
|
end
|
data/spec/lib/readme_spec.rb
CHANGED
@@ -1,205 +1,199 @@
|
|
1
|
-
require 'rspec'
|
2
|
-
$:.unshift File.expand_path('../../../active_mocker', __FILE__)
|
3
|
-
require 'active_mocker'
|
4
|
-
require 'string_reader'
|
5
|
-
|
6
|
-
describe 'ReadMe', pending:
|
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
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
end
|
202
|
-
|
203
|
-
end
|
204
|
-
|
205
|
-
end
|
1
|
+
# require 'rspec'
|
2
|
+
# $:.unshift File.expand_path('../../../active_mocker', __FILE__)
|
3
|
+
# require 'active_mocker'
|
4
|
+
# require 'string_reader'
|
5
|
+
#
|
6
|
+
# describe 'ReadMe', pending:true do
|
7
|
+
#
|
8
|
+
# before(:each) do
|
9
|
+
# ActiveMocker.configure do |config|
|
10
|
+
# # Required Options
|
11
|
+
# config.schema_file = ""
|
12
|
+
# config.model_dir = ""
|
13
|
+
# config.schema_file_reader = schema_file
|
14
|
+
# config.model_file_reader = model_file
|
15
|
+
# config.mock_dir =
|
16
|
+
# config.logger = Logger.new(STDOUT)
|
17
|
+
# end
|
18
|
+
# end
|
19
|
+
#
|
20
|
+
# let(:schema_file){
|
21
|
+
# StringReader.new <<-eos
|
22
|
+
#
|
23
|
+
# ActiveRecord::Schema.define(version: 20140327205359) do
|
24
|
+
#
|
25
|
+
# create_table "people", force: true do |t|
|
26
|
+
# t.integer "account_id"
|
27
|
+
# t.string "first_name", limit: 128
|
28
|
+
# t.string "last_name", limit: 128
|
29
|
+
# t.string "address", limit: 200
|
30
|
+
# t.string "city", limit: 100
|
31
|
+
# end
|
32
|
+
#
|
33
|
+
# end
|
34
|
+
#
|
35
|
+
# eos
|
36
|
+
# }
|
37
|
+
#
|
38
|
+
# let(:model_file){
|
39
|
+
# StringReader.new <<-eos
|
40
|
+
# class Person < ActiveRecord::Base
|
41
|
+
# belongs_to :account
|
42
|
+
#
|
43
|
+
# def bar(name, type=nil)
|
44
|
+
# puts name
|
45
|
+
# end
|
46
|
+
#
|
47
|
+
# def self.bar
|
48
|
+
# end
|
49
|
+
#
|
50
|
+
# end
|
51
|
+
# eos
|
52
|
+
# }
|
53
|
+
#
|
54
|
+
# before do
|
55
|
+
# ActiveMocker.mock('Person')
|
56
|
+
# end
|
57
|
+
#
|
58
|
+
# let(:person_mock){PersonMock}
|
59
|
+
#
|
60
|
+
# describe 'Usage' do
|
61
|
+
#
|
62
|
+
# it 'Mock a Person' do
|
63
|
+
# expect(ActiveMocker.mock('Person')).to eq PersonMock
|
64
|
+
# end
|
65
|
+
#
|
66
|
+
# it '::column_names' do
|
67
|
+
# expect(PersonMock.column_names).to eq ["id", "account_id", "first_name", "last_name", "address", "city"]
|
68
|
+
# end
|
69
|
+
#
|
70
|
+
# it '::new' do
|
71
|
+
# expect(PersonMock.new(first_name: "Dustin", last_name: "Zeisler").inspect).to eq("#<PersonMock id: nil, account_id: nil, first_name: \"Dustin\", last_name: \"Zeisler\", address: nil, city: nil>")
|
72
|
+
# end
|
73
|
+
#
|
74
|
+
# it '#first_name' do
|
75
|
+
# person_mock = PersonMock.new(first_name: "Dustin", last_name: "Zeisler")
|
76
|
+
# expect( person_mock.first_name).to eq 'Dustin'
|
77
|
+
# end
|
78
|
+
#
|
79
|
+
# end
|
80
|
+
#
|
81
|
+
# describe 'When schema.rb changes, the mock fails' do
|
82
|
+
#
|
83
|
+
# let(:schema_file){
|
84
|
+
# StringReader.new <<-eos
|
85
|
+
#
|
86
|
+
# ActiveRecord::Schema.define(version: 20140327205359) do
|
87
|
+
#
|
88
|
+
# create_table "people", force: true do |t|
|
89
|
+
# t.integer "account_id"
|
90
|
+
# t.string "f_name", limit: 128
|
91
|
+
# t.string "l_name", limit: 128
|
92
|
+
# t.string "address", limit: 200
|
93
|
+
# t.string "city", limit: 100
|
94
|
+
# end
|
95
|
+
#
|
96
|
+
# end
|
97
|
+
#
|
98
|
+
# eos
|
99
|
+
# }
|
100
|
+
#
|
101
|
+
# it 'fails' do
|
102
|
+
# expect{ActiveMocker.mock('Person').new(first_name: "Dustin", last_name: "Zeisler")}.to raise_error(RuntimeError)
|
103
|
+
# end
|
104
|
+
#
|
105
|
+
# end
|
106
|
+
#
|
107
|
+
# describe 'Mocking instance and class methods' do
|
108
|
+
#
|
109
|
+
# it 'bar is not Implemented' do
|
110
|
+
# expect{person_mock.bar}.to raise_error( RuntimeError, '::bar is not Implemented for Class: PersonMock' )
|
111
|
+
# end
|
112
|
+
#
|
113
|
+
# it 'is implemented' do
|
114
|
+
# person_mock.mock_instance_method(:bar) do |name, type=nil|
|
115
|
+
# "Now implemented with #{name} and #{type}"
|
116
|
+
# end
|
117
|
+
#
|
118
|
+
# expect(person_mock.new.bar('foo', 'type')).to eq "Now implemented with foo and type"
|
119
|
+
#
|
120
|
+
# person_mock.mock_class_method(:bar) do
|
121
|
+
# "Now implemented"
|
122
|
+
# end
|
123
|
+
#
|
124
|
+
# expect(person_mock.bar).to eq "Now implemented"
|
125
|
+
#
|
126
|
+
# end
|
127
|
+
#
|
128
|
+
# it 'has argument error' do
|
129
|
+
#
|
130
|
+
# person_mock.mock_instance_method(:bar) do |name, type=nil|
|
131
|
+
# "Now implemented with #{name} and #{type}"
|
132
|
+
# end
|
133
|
+
#
|
134
|
+
# expect{person_mock.new.bar}.to raise_error(ArgumentError, 'wrong number of arguments (0 for 1..2)')
|
135
|
+
#
|
136
|
+
# end
|
137
|
+
#
|
138
|
+
# end
|
139
|
+
#
|
140
|
+
# describe 'When the model changes, the mock fails' do
|
141
|
+
#
|
142
|
+
# context 'different arguments' do
|
143
|
+
#
|
144
|
+
# let(:model_file){
|
145
|
+
# StringReader.new <<-eos
|
146
|
+
# class Person < ActiveRecord::Base
|
147
|
+
# belongs_to :account
|
148
|
+
#
|
149
|
+
# def bar(name)
|
150
|
+
# puts name
|
151
|
+
# end
|
152
|
+
#
|
153
|
+
# end
|
154
|
+
# eos
|
155
|
+
# }
|
156
|
+
#
|
157
|
+
# it 'has argument error' do
|
158
|
+
#
|
159
|
+
# person_mock.mock_instance_method(:bar) do |name, type=nil|
|
160
|
+
# "Now implemented with #{name} and #{type}"
|
161
|
+
# end
|
162
|
+
#
|
163
|
+
# expect{person_mock.new.bar('foo', 'type')}.to raise_error(ArgumentError, 'wrong number of arguments (2 for 1)')
|
164
|
+
#
|
165
|
+
# end
|
166
|
+
#
|
167
|
+
# end
|
168
|
+
#
|
169
|
+
# context 'different method name' do
|
170
|
+
#
|
171
|
+
# let(:model_file){
|
172
|
+
# StringReader.new <<-eos
|
173
|
+
# class Person < ActiveRecord::Base
|
174
|
+
# belongs_to :account
|
175
|
+
#
|
176
|
+
# def foo(name)
|
177
|
+
# puts name
|
178
|
+
# end
|
179
|
+
#
|
180
|
+
# end
|
181
|
+
#
|
182
|
+
# eos
|
183
|
+
# }
|
184
|
+
#
|
185
|
+
# it 'when method name changes' do
|
186
|
+
#
|
187
|
+
# person_mock.mock_instance_method(:bar) do |name, type=nil|
|
188
|
+
# "Now implemented with #{name} and #{type}"
|
189
|
+
# end
|
190
|
+
#
|
191
|
+
# expect{person_mock.new.bar}.to raise_error(NoMethodError)
|
192
|
+
#
|
193
|
+
# end
|
194
|
+
#
|
195
|
+
# end
|
196
|
+
#
|
197
|
+
# end
|
198
|
+
#
|
199
|
+
# end
|