minitest-mock_expectations 0.9.0

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: bea8d6f91af92ae5f55ffb36919b36e9509e6358832b0a52dde9bd5fcd65d7ff
4
+ data.tar.gz: 1dce0a9264cc9c43aa074900b9a8be6dc5f816368c9cb4366a4c76f41328b953
5
+ SHA512:
6
+ metadata.gz: 0a3fa1196dd9a91d7924dad39649eabfab8f6ca189c38065dbbf90c0b14ed1e07a55159b92d3bef9ee4fa8f2809cf36c62a81356208616e318296a97988b1003
7
+ data.tar.gz: 89a4de17e26c12f095c6fb5835f6142fc0ae8eb3e93153d299727de8fff5d68907a74ac74fe1841ef676d6bef9c1657d857b3d3b9cf28f518f1de2b7ea9f02c9
File without changes
@@ -0,0 +1,9 @@
1
+ sudo: false
2
+ language: ruby
3
+ rvm:
4
+ - 2.5.1
5
+ before_install: gem install bundler
6
+
7
+ matrix:
8
+ allow_failures:
9
+ - rvm: ruby-head
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec
@@ -0,0 +1,22 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ minitest-mock_expectations (0.9.0)
5
+
6
+ GEM
7
+ remote: https://rubygems.org/
8
+ specs:
9
+ minitest (5.11.3)
10
+ rake (10.5.0)
11
+
12
+ PLATFORMS
13
+ ruby
14
+
15
+ DEPENDENCIES
16
+ bundler (~> 1.16)
17
+ minitest (~> 5.0)
18
+ minitest-mock_expectations!
19
+ rake (~> 10.0)
20
+
21
+ BUNDLED WITH
22
+ 1.16.2
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2018 bogdanvlviv
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
@@ -0,0 +1,207 @@
1
+ # minitest-mock_expectations
2
+
3
+ Provides method call assertions.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```ruby
10
+ gem 'minitest-mock_expectations'
11
+ ```
12
+
13
+ And then execute:
14
+
15
+ ```bash
16
+ $ bundle
17
+ ```
18
+
19
+ Or install it yourself as:
20
+
21
+ ```bash
22
+ $ gem install minitest-mock_expectations
23
+ ```
24
+
25
+ ## Usage
26
+
27
+ ```ruby
28
+ require "minitest/mock_expectations"
29
+ ```
30
+
31
+ Imagine we have model `Post`:
32
+
33
+ ```ruby
34
+ class Post
35
+ attr_accessor :title, :body
36
+ attr_reader :comments
37
+
38
+ def initialize(title: "", body: "", comments: [])
39
+ @title = title
40
+ @body = body
41
+ @comments = comments
42
+ end
43
+
44
+ def add_comment(comment)
45
+ @comments << comment
46
+
47
+ "Thank you!"
48
+ end
49
+ end
50
+ ```
51
+
52
+ and variable `@post` that reffers to instance of `Post`:
53
+
54
+ ```ruby
55
+ def setup
56
+ @post = Post.new(
57
+ title: "What is new in Rails 6.0",
58
+ body: "https://bogdanvlviv.com/posts/ruby/rails/what-is-new-in-rails-6_0.html",
59
+ comments: [
60
+ "Looking really good.",
61
+ "I'm really like this post."
62
+ ]
63
+ )
64
+ end
65
+ ```
66
+
67
+ ### assert_called
68
+
69
+ Asserts that the method will be called once on the object in the block:
70
+
71
+ ```ruby
72
+ assert_called @post, :title do
73
+ @post.title
74
+ end
75
+ ```
76
+
77
+ In order to assert that the method will be called multiple times on the object in the block set `:times` option:
78
+
79
+ ```ruby
80
+ assert_called(@post, :title, times: 2) do
81
+ @post.title
82
+ @post.title
83
+ end
84
+ ```
85
+
86
+ You can stub the return value of the method in the block via `:returns` option:
87
+
88
+ ```ruby
89
+ assert_called(@post, :title, returns: "What is new in Rails 5.2") do
90
+ assert_equal "What is new in Rails 5.2", @object.title
91
+ end
92
+
93
+ assert_equal "What is new in Rails 6.0", @object.title
94
+ ```
95
+
96
+ ### assert_not_called
97
+
98
+ Asserts that the method will not be called on the object in the block:
99
+
100
+ ```ruby
101
+ assert_not_called(@post, :title) do
102
+ @post.body
103
+ end
104
+ ```
105
+
106
+ ### assert_called_with
107
+
108
+ Asserts that the method will be called with the arguments once on the object in the block:
109
+
110
+ ```ruby
111
+ assert_called_with(@post, :add_comment, ["Thanks for sharing this."]) do
112
+ @post.add_comment("Thanks for sharing this.")
113
+ end
114
+ ```
115
+
116
+ You can stub the return value of the method in the block via `:returns` option:
117
+
118
+ ```ruby
119
+ assert_called_with(@post, :add_comment, ["Thanks for sharing this."], returns: "Thanks!") do
120
+ assert_equal "Thanks!", @post.add_comment("Thanks for sharing this.")
121
+ end
122
+
123
+ assert_equal "Thank you!", @post.add_comment("Thanks for sharing this.")
124
+ ```
125
+
126
+ You can also assert that the method will be called with different arguments once on the object in the block:
127
+
128
+ ```ruby
129
+ assert_called_with(@post, :add_comment, [["Thanks for sharing this."], ["Thanks!"]]) do
130
+ @post.add_comment("Thanks for sharing this.")
131
+ @post.add_comment("Thanks!")
132
+ end
133
+ ```
134
+
135
+ ### assert_called_on_instance_of
136
+
137
+ Asserts that the method will be called once on an instance of the klass in the block:
138
+
139
+ ```ruby
140
+ assert_called_on_instance_of Post, :title do
141
+ @post.title
142
+ end
143
+ ```
144
+
145
+ In order to assert that the method will be called multiple times on an instance of the klass in the block set `:times` option:
146
+
147
+ ```ruby
148
+ assert_called_on_instance_of(Post, :title, times: 2) do
149
+ @post.title
150
+ @post.title
151
+ end
152
+ ```
153
+
154
+ You can stub the return value of the method in the block via `:returns` option:
155
+
156
+ ```ruby
157
+ assert_called_on_instance_of(Post, :title, returns: "What is new in Rails 5.2") do
158
+ assert_equal "What is new in Rails 5.2", @post.title
159
+ end
160
+
161
+ assert_equal "What is new in Rails 6.0", @post.title
162
+ ```
163
+
164
+ Use nesting of the blocks in order assert that the several methods will be called on an instance of the klass in the block:
165
+
166
+ ```ruby
167
+ assert_called_on_instance_of(Post, :title, times: 3) do
168
+ assert_called_on_instance_of(Post, :body, times: 2) do
169
+ @post.title
170
+ @post.body
171
+ @post.title
172
+ @post.body
173
+ @post.title
174
+ end
175
+ end
176
+ ```
177
+
178
+ ### assert_not_called_on_instance_of
179
+
180
+ Asserts that the method will not be called once on an instance of the klass in the block:
181
+
182
+ ```ruby
183
+ assert_not_called(@post, :title) do
184
+ @post.body
185
+ end
186
+ ```
187
+
188
+ Use nesting of the blocks in order assert that the several methods will not be called on an instance of the klass in the block:
189
+
190
+ ```ruby
191
+ assert_not_called_on_instance_of(Post, :title) do
192
+ assert_not_called_on_instance_of(Post, :body) do
193
+ end
194
+ end
195
+ ```
196
+
197
+ ## Contributing
198
+
199
+ Bug reports and pull requests are welcome on GitHub at https://github.com/bogdanvlviv/minitest-mock_expectations. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](https://contributor-covenant.org) code of conduct.
200
+
201
+ ## Code Status
202
+
203
+ [![travis-ci](https://api.travis-ci.org/bogdanvlviv/minitest-mock_expectations.svg?branch=master)](https://travis-ci.org/bogdanvlviv/minitest-mock_expectations)
204
+
205
+ ## License
206
+
207
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
@@ -0,0 +1,10 @@
1
+ require "bundler/gem_tasks"
2
+ require "rake/testtask"
3
+
4
+ Rake::TestTask.new(:test) do |t|
5
+ t.libs << "test"
6
+ t.libs << "lib"
7
+ t.test_files = FileList["test/**/*_test.rb"]
8
+ end
9
+
10
+ task :default => :test
@@ -0,0 +1,7 @@
1
+ require "minitest/mock_expectations/version"
2
+ require "minitest/mock_expectations/assertions"
3
+
4
+ module Minitest
5
+ module MockExpectations
6
+ end
7
+ end
@@ -0,0 +1,185 @@
1
+ require "minitest"
2
+ require "minitest/assertions"
3
+ require "minitest/mock"
4
+
5
+ module Minitest
6
+ # Provides method call assertions
7
+ #
8
+ # Imagine we have model +Post+:
9
+ #
10
+ # class Post
11
+ # attr_accessor :title, :body
12
+ # attr_reader :comments
13
+ #
14
+ # def initialize(title: "", body: "", comments: [])
15
+ # @title = title
16
+ # @body = body
17
+ # @comments = comments
18
+ # end
19
+ #
20
+ # def add_comment(comment)
21
+ # @comments << comment
22
+ #
23
+ # "Thank you!"
24
+ # end
25
+ # end
26
+ #
27
+ # and variable +@post+ that reffers to instance of +Post+:
28
+ #
29
+ # def setup
30
+ # @post = Post.new(
31
+ # title: "What is new in Rails 6.0",
32
+ # body: "https://bogdanvlviv.com/posts/ruby/rails/what-is-new-in-rails-6_0.html",
33
+ # comments: [
34
+ # "Looking really good.",
35
+ # "I'm really like this post."
36
+ # ]
37
+ # )
38
+ # end
39
+ module Assertions
40
+ # Asserts that the method will be called once on the object in the block:
41
+ #
42
+ # assert_called @post, :title do
43
+ # @post.title
44
+ # end
45
+ #
46
+ # In order to assert that the method will be called multiple times on the object in the block set +:times+ option:
47
+ #
48
+ # assert_called(@post, :title, times: 2) do
49
+ # @post.title
50
+ # @post.title
51
+ # end
52
+ #
53
+ # You can stub the return value of the method in the block via +:returns+ option:
54
+ #
55
+ # assert_called(@post, :title, returns: "What is new in Rails 5.2") do
56
+ # assert_equal "What is new in Rails 5.2", @object.title
57
+ # end
58
+ #
59
+ # assert_equal "What is new in Rails 6.0", @object.title
60
+ def assert_called(object, method_name, message = nil, times: 1, returns: nil)
61
+ times_called = 0
62
+
63
+ object.stub(method_name, proc { times_called += 1; returns }) { yield }
64
+
65
+ error = "Expected #{method_name} to be called #{times} times, but was called #{times_called} times"
66
+ error = "#{message}.\n#{error}" if message
67
+ assert_equal times, times_called, error
68
+ end
69
+
70
+ # Asserts that the method will not be called on the object in the block:
71
+ #
72
+ # assert_not_called(@post, :title) do
73
+ # @post.body
74
+ # end
75
+ def assert_not_called(object, method_name, message = nil, &block)
76
+ assert_called(object, method_name, message, times: 0, &block)
77
+ end
78
+
79
+ # Asserts that the method will be called with the arguments once on the object in the block:
80
+ #
81
+ # assert_called_with(@post, :add_comment, ["Thanks for sharing this."]) do
82
+ # @post.add_comment("Thanks for sharing this.")
83
+ # end
84
+ #
85
+ # You can stub the return value of the method in the block via +:returns+ option:
86
+ #
87
+ # assert_called_with(@post, :add_comment, ["Thanks for sharing this."], returns: "Thanks!") do
88
+ # assert_equal "Thanks!", @post.add_comment("Thanks for sharing this.")
89
+ # end
90
+ #
91
+ # assert_equal "Thank you!", @post.add_comment("Thanks for sharing this.")
92
+ #
93
+ # You can also assert that the method will be called with different arguments once on the object in the block:
94
+ #
95
+ # assert_called_with(@post, :add_comment, [["Thanks for sharing this."], ["Thanks!"]]) do
96
+ # @post.add_comment("Thanks for sharing this.")
97
+ # @post.add_comment("Thanks!")
98
+ # end
99
+ def assert_called_with(object, method_name, args, returns: nil)
100
+ mock = Minitest::Mock.new
101
+
102
+ if args.all? { |arg| arg.is_a?(Array) }
103
+ args.each { |arg| mock.expect(:call, returns, arg) }
104
+ else
105
+ mock.expect(:call, returns, args)
106
+ end
107
+
108
+ object.stub(method_name, mock) { yield }
109
+
110
+ mock.verify
111
+ end
112
+
113
+ # Asserts that the method will be called once on an instance of the klass in the block:
114
+ #
115
+ # assert_called_on_instance_of Post, :title do
116
+ # @post.title
117
+ # end
118
+ #
119
+ # In order to assert that the method will be called multiple times on an instance of the klass in the block set +:times+ option:
120
+ #
121
+ # assert_called_on_instance_of(Post, :title, times: 2) do
122
+ # @post.title
123
+ # @post.title
124
+ # end
125
+ #
126
+ # You can stub the return value of the method in the block via +:returns+ option:
127
+ #
128
+ # assert_called_on_instance_of(Post, :title, returns: "What is new in Rails 5.2") do
129
+ # assert_equal "What is new in Rails 5.2", @post.title
130
+ # end
131
+ #
132
+ # assert_equal "What is new in Rails 6.0", @post.title
133
+ #
134
+ # Use nesting of the blocks in order assert that the several methods will be called on an instance of the klass in the block:
135
+ #
136
+ # assert_called_on_instance_of(Post, :title, times: 3) do
137
+ # assert_called_on_instance_of(Post, :body, times: 2) do
138
+ # @post.title
139
+ # @post.body
140
+ # @post.title
141
+ # @post.body
142
+ # @post.title
143
+ # end
144
+ # end
145
+ def assert_called_on_instance_of(klass, method_name, message = nil, times: 1, returns: nil)
146
+ times_called = 0
147
+
148
+ klass.send(:define_method, "stubbed_#{method_name}") do |*|
149
+ times_called += 1
150
+
151
+ returns
152
+ end
153
+
154
+ klass.send(:alias_method, "original_#{method_name}", method_name)
155
+ klass.send(:alias_method, method_name, "stubbed_#{method_name}")
156
+
157
+ yield
158
+
159
+ error = "Expected #{method_name} to be called #{times} times, but was called #{times_called} times"
160
+ error = "#{message}.\n#{error}" if message
161
+
162
+ assert_equal times, times_called, error
163
+ ensure
164
+ klass.send(:alias_method, method_name, "original_#{method_name}")
165
+ klass.send(:undef_method, "original_#{method_name}")
166
+ klass.send(:undef_method, "stubbed_#{method_name}")
167
+ end
168
+
169
+ # Asserts that the method will not be called once on an instance of the klass in the block:
170
+ #
171
+ # assert_not_called(@post, :title) do
172
+ # @post.body
173
+ # end
174
+ #
175
+ # Use nesting of the blocks in order assert that the several methods will not be called on an instance of the klass in the block:
176
+ #
177
+ # assert_not_called_on_instance_of(Post, :title) do
178
+ # assert_not_called_on_instance_of(Post, :body) do
179
+ # end
180
+ # end
181
+ def assert_not_called_on_instance_of(klass, method_name, message = nil, &block)
182
+ assert_called_on_instance_of(klass, method_name, message, times: 0, &block)
183
+ end
184
+ end
185
+ end
@@ -0,0 +1,5 @@
1
+ module Minitest
2
+ module MockExpectations
3
+ VERSION = "0.9.0"
4
+ end
5
+ end
@@ -0,0 +1,22 @@
1
+ lib = File.expand_path("lib", __dir__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+ require "minitest/mock_expectations/version"
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "minitest-mock_expectations"
7
+ spec.version = Minitest::MockExpectations::VERSION
8
+ spec.authors = ["bogdanvlviv"]
9
+ spec.email = ["bogdanvlviv@gmail.com"]
10
+
11
+ spec.summary = "Provides method call assertions"
12
+ spec.description = ""
13
+ spec.homepage = "https://github.com/bogdanvlviv/minitest-mock_expectations"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.require_paths = ["lib"]
18
+
19
+ spec.add_development_dependency "bundler", "~> 1.16"
20
+ spec.add_development_dependency "rake", "~> 10.0"
21
+ spec.add_development_dependency "minitest", "~> 5.0"
22
+ end
@@ -0,0 +1,201 @@
1
+ require "test_helper"
2
+
3
+ class Minitest::MockExpectations::AssertionsTest < Minitest::Test
4
+ class Post
5
+ attr_accessor :title, :body
6
+ attr_reader :comments
7
+
8
+ def initialize(title: "", body: "", comments: [])
9
+ @title = title
10
+ @body = body
11
+ @comments = comments
12
+ end
13
+
14
+ def add_comment(comment)
15
+ @comments << comment
16
+
17
+ "Thank you!"
18
+ end
19
+ end
20
+
21
+ def setup
22
+ @post = Post.new(
23
+ title: "What is new in Rails 6.0",
24
+ body: "https://bogdanvlviv.com/posts/ruby/rails/what-is-new-in-rails-6_0.html",
25
+ comments: [
26
+ "Looking really good.",
27
+ "I'm really like this post."
28
+ ]
29
+ )
30
+ end
31
+
32
+ def test_assert_called_with_defaults_to_expect_once
33
+ assert_called @post, :title do
34
+ @post.title
35
+ end
36
+ end
37
+
38
+ def test_assert_called_more_than_once
39
+ assert_called(@post, :title, times: 2) do
40
+ @post.title
41
+ @post.title
42
+ end
43
+ end
44
+
45
+ def test_assert_called_method_with_arguments
46
+ assert_called(@post, :add_comment) do
47
+ @post.add_comment("Thanks for sharing this.")
48
+ end
49
+ end
50
+
51
+ def test_assert_called_returns
52
+ assert_called(@post, :title, returns: "What is new in Rails 5.2") do
53
+ assert_equal "What is new in Rails 5.2", @post.title
54
+ end
55
+
56
+ assert_equal "What is new in Rails 6.0", @post.title
57
+ end
58
+
59
+ def test_assert_called_failure
60
+ error = assert_raises(Minitest::Assertion) do
61
+ assert_called(@post, :title) do
62
+ end
63
+ end
64
+
65
+ assert_equal "Expected title to be called 1 times, but was called 0 times.\nExpected: 1\n Actual: 0", error.message
66
+ end
67
+
68
+ def test_assert_not_called
69
+ assert_not_called(@post, :title) do
70
+ @post.body
71
+ end
72
+ end
73
+
74
+ def test_assert_not_called_failure
75
+ error = assert_raises(Minitest::Assertion) do
76
+ assert_not_called(@post, :title) do
77
+ @post.title
78
+ end
79
+ end
80
+
81
+ assert_equal "Expected title to be called 0 times, but was called 1 times.\nExpected: 0\n Actual: 1", error.message
82
+ end
83
+
84
+ def test_assert_called_with_message
85
+ error = assert_raises(Minitest::Assertion) do
86
+ assert_called(@post, :title, "Message") do
87
+ end
88
+ end
89
+
90
+ assert_equal "Message.\nExpected title to be called 1 times, but was called 0 times.\nExpected: 1\n Actual: 0", error.message
91
+ end
92
+
93
+ def test_assert_called_with_arguments
94
+ assert_called_with(@post, :add_comment, ["Thanks for sharing this."]) do
95
+ @post.add_comment("Thanks for sharing this.")
96
+ end
97
+ end
98
+
99
+ def test_assert_called_with_arguments_and_returns
100
+ assert_called_with(@post, :add_comment, ["Thanks for sharing this."], returns: "Thanks!") do
101
+ assert_equal "Thanks!", @post.add_comment("Thanks for sharing this.")
102
+ end
103
+
104
+ assert_equal "Thank you!", @post.add_comment("Thanks for sharing this.")
105
+ end
106
+
107
+ def test_assert_called_with_failure
108
+ assert_raises(MockExpectationError) do
109
+ assert_called_with(@post, :add_comment, ["Thanks for sharing this."]) do
110
+ @post.add_comment("Thanks")
111
+ end
112
+ end
113
+ end
114
+
115
+ def test_assert_called_with_multiple_expected_arguments
116
+ assert_called_with(@post, :add_comment, [["Thanks for sharing this."], ["Thanks!"]]) do
117
+ @post.add_comment("Thanks for sharing this.")
118
+ @post.add_comment("Thanks!")
119
+ end
120
+ end
121
+
122
+ def test_assert_called_on_instance_of_with_defaults_to_expect_once
123
+ assert_called_on_instance_of Post, :title do
124
+ @post.title
125
+ end
126
+ end
127
+
128
+ def test_assert_called_on_instance_of_more_than_once
129
+ assert_called_on_instance_of(Post, :title, times: 2) do
130
+ @post.title
131
+ @post.title
132
+ end
133
+ end
134
+
135
+ def test_assert_called_on_instance_of_with_arguments
136
+ assert_called_on_instance_of(Post, :add_comment) do
137
+ @post.add_comment("Thanks for sharing this.")
138
+ end
139
+ end
140
+
141
+ def test_assert_called_on_instance_of_returns
142
+ assert_called_on_instance_of(Post, :title, returns: "What is new in Rails 5.2") do
143
+ assert_equal "What is new in Rails 5.2", @post.title
144
+ end
145
+
146
+ assert_equal "What is new in Rails 6.0", @post.title
147
+ end
148
+
149
+ def test_assert_called_on_instance_of_failure
150
+ error = assert_raises(Minitest::Assertion) do
151
+ assert_called_on_instance_of(Post, :title) do
152
+ end
153
+ end
154
+
155
+ assert_equal "Expected title to be called 1 times, but was called 0 times.\nExpected: 1\n Actual: 0", error.message
156
+ end
157
+
158
+ def test_assert_called_on_instance_of_with_message
159
+ error = assert_raises(Minitest::Assertion) do
160
+ assert_called_on_instance_of(Post, :title, "Message") do
161
+ end
162
+ end
163
+
164
+ assert_equal "Message.\nExpected title to be called 1 times, but was called 0 times.\nExpected: 1\n Actual: 0", error.message
165
+ end
166
+
167
+ def test_assert_called_on_instance_of_nesting
168
+ assert_called_on_instance_of(Post, :title, times: 3) do
169
+ assert_called_on_instance_of(Post, :body, times: 2) do
170
+ @post.title
171
+ @post.body
172
+ @post.title
173
+ @post.body
174
+ @post.title
175
+ end
176
+ end
177
+ end
178
+
179
+ def test_assert_not_called_on_instance_of
180
+ assert_not_called_on_instance_of(Post, :title) do
181
+ @post.body
182
+ end
183
+ end
184
+
185
+ def test_assert_not_called_on_instance_of_failure
186
+ error = assert_raises(Minitest::Assertion) do
187
+ assert_not_called_on_instance_of(Post, :title) do
188
+ @post.title
189
+ end
190
+ end
191
+
192
+ assert_equal "Expected title to be called 0 times, but was called 1 times.\nExpected: 0\n Actual: 1", error.message
193
+ end
194
+
195
+ def test_assert_not_called_on_instance_of_nesting
196
+ assert_not_called_on_instance_of(Post, :title) do
197
+ assert_not_called_on_instance_of(Post, :body) do
198
+ end
199
+ end
200
+ end
201
+ end
@@ -0,0 +1,7 @@
1
+ require "test_helper"
2
+
3
+ class Minitest::MockExpectationsTest < Minitest::Test
4
+ def test_that_it_has_a_version_number
5
+ refute_nil ::Minitest::MockExpectations::VERSION
6
+ end
7
+ end
@@ -0,0 +1,4 @@
1
+ $LOAD_PATH.unshift File.expand_path("../lib", __dir__)
2
+ require "minitest/mock_expectations"
3
+
4
+ require "minitest/autorun"
metadata ADDED
@@ -0,0 +1,100 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: minitest-mock_expectations
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.9.0
5
+ platform: ruby
6
+ authors:
7
+ - bogdanvlviv
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-10-18 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.16'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.16'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '5.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '5.0'
55
+ description: ''
56
+ email:
57
+ - bogdanvlviv@gmail.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - ".gitignore"
63
+ - ".travis.yml"
64
+ - Gemfile
65
+ - Gemfile.lock
66
+ - LICENSE.txt
67
+ - README.md
68
+ - Rakefile
69
+ - lib/minitest/mock_expectations.rb
70
+ - lib/minitest/mock_expectations/assertions.rb
71
+ - lib/minitest/mock_expectations/version.rb
72
+ - minitest-mock_expectations.gemspec
73
+ - test/minitest/mock_expectations/assertions_test.rb
74
+ - test/minitest/mock_expectations_test.rb
75
+ - test/test_helper.rb
76
+ homepage: https://github.com/bogdanvlviv/minitest-mock_expectations
77
+ licenses:
78
+ - MIT
79
+ metadata: {}
80
+ post_install_message:
81
+ rdoc_options: []
82
+ require_paths:
83
+ - lib
84
+ required_ruby_version: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ required_rubygems_version: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ requirements: []
95
+ rubyforge_project:
96
+ rubygems_version: 2.7.6
97
+ signing_key:
98
+ specification_version: 4
99
+ summary: Provides method call assertions
100
+ test_files: []