rspec-xunit 0.4.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d48b5d54ba47473aa22ac7ec656b7b3f772b6cbeb64d1bd4fc2f6717d0cf0775
4
- data.tar.gz: 8cd92f78030c96d6d2c73b2fb0dc6853ec1a2b399af134160263a9fcc0ba56be
3
+ metadata.gz: 713f3c53c0bd3aad430437522e74b80d908906ab961722eb20d9a69b22172dde
4
+ data.tar.gz: 04d407dfa15abe6a3916a9352d456a0b6397beebadfb6add22246889cca546ba
5
5
  SHA512:
6
- metadata.gz: cbb7e89e1e735e8d593edf2c01b4b406a8af76ea2e59c81e4943e9ca72567460d431a61181c4826039dcf6fe7bfd7b0511f235c5b3e40a83b18f9022ab2c9e73
7
- data.tar.gz: 70df062dddc7f78a23f67b7bb15429aa75459c65abeb4920f76048987662bf554790bc468f1974eca43f5081474527435f0774463a7e3c5f41aefa577cb45910
6
+ metadata.gz: e34fc54d2bc49c960802fbb767c53a3d30d4021f0fc02d9992d20b8c93eeca98a69f769f7361097f88919b132672cfea0284a24d7663bbc62fc475ca2dc2e353
7
+ data.tar.gz: 8e8e894a5ecefd0d7aba030909924a578c61ea707466354961bcce8c8b091a9c2ba0f5422362b3fc7b6cfff9d2ce4e8b4ea9bf0464b94eb58172851454030b27
data/Gemfile CHANGED
@@ -4,3 +4,5 @@ source 'https://rubygems.org'
4
4
 
5
5
  # Specify your gem's dependencies in rspec-xunit.gemspec
6
6
  gemspec
7
+
8
+ gem 'rspec-mocks'
data/README.md CHANGED
@@ -138,7 +138,7 @@ end
138
138
  We have the aliases of `assert_raise` and `assert_raises` to
139
139
  `assert_raise_error` for that extra bittersweet xUnit feel. 🤤
140
140
 
141
- Some block-level assertions, though are hard to convert. Take this example,
141
+ Some block-level assertions are hard to convert. Take this example,
142
142
  for example 😉:
143
143
 
144
144
  ```ruby
@@ -154,13 +154,13 @@ end
154
154
  ```
155
155
 
156
156
  We cannot translate `change { Session.count }.by(1)` to a nice assertion. This
157
- is where the `assert` fall-back comes in:
157
+ is where the `assert!` fall-back comes in:
158
158
 
159
159
  ```ruby
160
160
  test "user authentication" do
161
161
  user = create :user
162
162
 
163
- assert {
163
+ assert! {
164
164
  assert_valid? login
165
165
  }.to change { Session.count }.by(1)
166
166
  end
@@ -176,3 +176,8 @@ method on the asserted object.
176
176
  ```ruby
177
177
  assert_empty? object_responding_to_empty_question_mark
178
178
  ```
179
+
180
+ ### Stubs & Mocks
181
+
182
+ To write stubs and mocks in xUnit fashion, use `stub` instead of `allow` and
183
+ `mock` instead of `expect`. Everything else is the same.
@@ -9,11 +9,11 @@ module RSpec
9
9
  # Assertion match converts RSpec matchers into an XUnit friendly
10
10
  # assertions.
11
11
  #
12
- # For example: `assertion_match :eq` will create an `assert_eq` method
13
- # behaving in the same way as:
12
+ # For example, `assertion_match :eq` will create two methods:
14
13
  #
15
- # `expect(action).to eq(expected)`
16
- def assertion_match(matcher, suffix = guess_assertion_suffix(matcher))
14
+ # - `assert_eq` roughly `expect(action).to eq(expected)`
15
+ # - `assert_not_eq` roughly `expect(action).to_not eq(expected)`
16
+ def assertion_match(matcher, suffix = matcher)
17
17
  define_method "assert_#{suffix}" do |value, *args, &block|
18
18
  begin
19
19
  expect(value).to send(matcher, *args, &block)
@@ -21,16 +21,25 @@ module RSpec
21
21
  raise e, e.message, adjust_for_better_failure_message(e.backtrace), cause: nil
22
22
  end
23
23
  end
24
+
25
+ define_method "assert_not_#{suffix}" do |value, *args, &block|
26
+ begin
27
+ expect(value).to_not send(matcher, *args, &block)
28
+ rescue Expectations::ExpectationNotMetError => e
29
+ raise e, e.message, adjust_for_better_failure_message(e.backtrace), cause: nil
30
+ end
31
+ end
24
32
  end
25
33
 
26
34
  # Assertion match block converts RSpec block matchers into XUnit
27
35
  # friendly assertions.
28
36
  #
29
- # For example: `assertion_match_block :raises, :raise_error` will
30
- # create an `assert_raises` method behaving in the same way as:
37
+ # For example, `assertion_match_block :raises, :raise_error` will
38
+ # generate two methods:
31
39
  #
32
- # `expect { bloc }.to raise_error`
33
- def assertion_match_block(matcher, suffix = guess_assertion_suffix(matcher))
40
+ # - `assert_raises` roughly `expect { bloc }.to raise_error`
41
+ # - `assert_not_raises` roughly `expect { bloc }.to_not raise_error`
42
+ def assertion_match_block(matcher, suffix = matcher)
34
43
  define_method "assert_#{suffix}" do |*args, &block|
35
44
  begin
36
45
  expect(&block).to send(matcher, *args)
@@ -38,75 +47,84 @@ module RSpec
38
47
  raise e, e.message, adjust_for_better_failure_message(e.backtrace), cause: nil
39
48
  end
40
49
  end
41
- end
42
-
43
- private
44
-
45
- MATCHER_CRUFT_REGEX = /((?:be_)|(?:have_))(.*)/.freeze
46
50
 
47
- def guess_assertion_suffix(matcher_name)
48
- MATCHER_CRUFT_REGEX.match(matcher_name) do |match|
49
- match[2]
50
- end || matcher_name
51
+ define_method "assert_not_#{suffix}" do |*args, &block|
52
+ begin
53
+ expect(&block).to_not send(matcher, *args)
54
+ rescue Expectations::ExpectationNotMetError => e
55
+ raise e, e.message, adjust_for_better_failure_message(e.backtrace), cause: nil
56
+ end
57
+ end
51
58
  end
52
59
  end
53
60
 
54
- assertion_match :be_truthy
55
- assertion_match :be_falsy
56
- assertion_match :be_nil
57
- assertion_match :be
58
- assertion_match :be_a
61
+ # Useful aliaises.
62
+ assertion_match :be_truthy, :truthy
63
+ assertion_match :be_falsy, :falsy
64
+ assertion_match :be_nil, :nil
59
65
  assertion_match :be_a, :is_a
60
- assertion_match :be_kind_of
61
- assertion_match :be_instance_of
62
- assertion_match :be_between
63
- assertion_match :be_within
64
- assertion_match :contain_exactly
65
- assertion_match :cover
66
- assertion_match :end_with
67
- assertion_match :eq
68
- assertion_match :equal
69
- assertion_match :eql
70
- assertion_match :exist
71
- assertion_match :have_attributes
72
- assertion_match :include
73
- assertion_match :all
74
- assertion_match :match
75
- assertion_match :match_array
76
- assertion_match :respond_to
77
- assertion_match :satisfy
78
- assertion_match :start_with
79
- assertion_match :throw_symbol
80
- assertion_match :throw_symbol, :throw
81
- assertion_match :yield_control
82
- assertion_match :yield_with_no_args
83
- assertion_match :yield_successive_args
84
-
85
- assertion_match_block :change
86
- assertion_match_block :raise_error
66
+ assertion_match :be_kind_of, :kind_of
67
+ assertion_match :be_instance_of, :instance_of
68
+ assertion_match :be_between, :between
69
+ assertion_match :be_within, :within
70
+
87
71
  assertion_match_block :raise_error, :raise
88
72
  assertion_match_block :raise_error, :raises
89
- assertion_match_block :output
73
+
74
+ # Exceptions to the block matcher rule.
75
+ assertion_match :satisfy
90
76
 
91
77
  # Assert is an alias to `expect`. Use it when all else fails or doesn't
92
78
  # feel right. The `change` assertion with a block is a good example:
93
79
  #
80
+ # `assert! { block }.to change { value }` or
94
81
  # `assert { block }.to change { value }`
95
- def assert(value = Expectations::ExpectationTarget::UndefinedValue, &block)
82
+ def assert!(value = Expectations::ExpectationTarget::UndefinedValue, &block)
83
+ Expectations::ExpectationTarget.for(value, block)
84
+ end
85
+
86
+ alias assert assert!
87
+
88
+ # Mock is an XUnit alternative to the `expect` based mocking syntax.
89
+ #
90
+ # `mock(Post).to receive(:comments)`
91
+ def mock(value = Expectations::ExpectationTarget::UndefinedValue, &block)
96
92
  Expectations::ExpectationTarget.for(value, block)
97
93
  end
98
94
 
95
+ # Stub is an XUnit alternative to the `allow` based mocking syntax.
96
+ def stub(target)
97
+ RSpec::Mocks::AllowanceTarget.new(target)
98
+ end
99
+
99
100
  private
100
101
 
102
+ ASSERTION_REGEX = /^assert_(.*)$/.freeze
101
103
  ASSERTION_PREDICATE_REGEX = /^assert_(.*)\?$/.freeze
102
104
 
103
105
  def method_missing(method, *args, &block)
104
- ASSERTION_PREDICATE_REGEX.match(method.to_s) do |match|
106
+ return if ASSERTION_PREDICATE_REGEX.match(method.to_s) do |match|
105
107
  value = args.shift
106
108
  matcher = "be_#{match[1]}"
107
109
 
108
110
  expect(value).to Matchers::BuiltIn::BePredicate.new(matcher, *args, &block)
109
- end || super
111
+ end
112
+
113
+ return if ASSERTION_REGEX.match(method.to_s) do |match|
114
+ matcher = match[1]
115
+
116
+ RSpec::XUnit::Assertions.module_eval do
117
+ if block.nil?
118
+ assertion_match matcher
119
+ else
120
+ assertion_match_block matcher
121
+ end
122
+ end
123
+
124
+ send "assert_#{match[1]}", *args, &block
125
+ end
126
+
127
+ super
110
128
  end
111
129
 
112
130
  def respond_to_missing?(method, *)
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RSpec
4
4
  module XUnit
5
- VERSION = '0.4.0'
5
+ VERSION = '0.5.0'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-xunit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Genadi Samokovarov
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-08-10 00:00:00.000000000 Z
11
+ date: 2020-03-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec-core