capybara_test_helpers 1.0.0 → 1.0.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f491ad2f4d94ecd7e159466955e97b5e87117a5bb3fdb8eb907139e25fcb7ef1
4
- data.tar.gz: 0f2d79cf1b201ffc6f4a2b7601b2550c85e626f2ebe32f367538e49a5adfcde2
3
+ metadata.gz: 9e4f6226edd7ecb46f2d8376f129d26e8ee0156ed0df1fd1083881a224489da8
4
+ data.tar.gz: da483ed245cd972f66b291e31c5345bf9b451c8f26c866284d7f35892043a4b6
5
5
  SHA512:
6
- metadata.gz: c323a983bc4b02cde81006a986388c8cb1a5c88c4db8a8c4b9a2bc746765c8b6b46487593b25ce2a46628865b6b2bb54cbb6c1afeeaea7965667778e60044e2b
7
- data.tar.gz: 7b77a14b74c33d4a934071014a43db8ed63c184fea3e5ef8fc91a1ed4439f7e3a40398b87cd763249771b6a813e3a608fcd1caff93c941d4baa97db60f711b7e
6
+ metadata.gz: 66ee90ceda7582b79b2ffc905f875422ad7122a3a9a29c589b9df2bd63417ee81c94f6fa66c2d26568ff8cb01e835c8dcc30e4e7970e6ece174376941f07ac39
7
+ data.tar.gz: c75546cc4a3ea671b22ccf685fba84a2767f3d0ac2e652b214f144eb28ea0a284b8f38198596b03c487f81d49bea0e447ea608b0deeaf42bf2f19d46a3fcae5a
@@ -1,3 +1,8 @@
1
+ ## Upcoming Changes
2
+
3
+ * Add `has?` alias for `has_selector?`.
4
+ * Delegate `have` to the RSpec collection matcher when passing an Integer.
5
+
1
6
  ## Capybara Test Helpers 1.0.0 (2020-11-17) ##
2
7
 
3
8
  * Initial Release.
data/README.md CHANGED
@@ -2,7 +2,6 @@
2
2
  Capybara Test Helpers
3
3
  <p align="center">
4
4
  <a href="https://github.com/ElMassimo/capybara_test_helpers/actions"><img alt="Build Status" src="https://github.com/ElMassimo/capybara_test_helpers/workflows/build/badge.svg"/></a>
5
- <a href="https://inch-ci.org/github/ElMassimo/capybara_test_helpers"><img alt="Inline docs" src="https://inch-ci.org/github/ElMassimo/capybara_test_helpers.svg"/></a>
6
5
  <a href="https://codeclimate.com/github/ElMassimo/capybara_test_helpers"><img alt="Maintainability" src="https://codeclimate.com/github/ElMassimo/capybara_test_helpers/badges/gpa.svg"/></a>
7
6
  <a href="https://codeclimate.com/github/ElMassimo/capybara_test_helpers"><img alt="Test Coverage" src="https://codeclimate.com/github/ElMassimo/capybara_test_helpers/badges/coverage.svg"/></a>
8
7
  <a href="https://rubygems.org/gems/capybara_test_helpers"><img alt="Gem Version" src="https://img.shields.io/gem/v/capybara_test_helpers.svg?colorB=e9573f"/></a>
@@ -14,8 +13,9 @@ Capybara Test Helpers
14
13
  an opinionated library built on top of [capybara], that encourages good testing
15
14
  practices based on encapsulation and reuse.
16
15
 
17
- Write tests that everyone can understand, and leverage your Ruby skills to keep tests __easy to read and easy to change__.
16
+ Write tests that everyone can understand, and leverage your Ruby skills to keep them __easy to read and easy to change__.
18
17
 
18
+ [docs]: https://capybara-test-helpers.netlify.app/
19
19
  [capybara]: https://github.com/teamcapybara/capybara
20
20
  [capybara dsl]: https://github.com/teamcapybara/capybara#the-dsl
21
21
  [capybara querying]: https://github.com/teamcapybara/capybara#querying
@@ -27,7 +27,7 @@ Write tests that everyone can understand, and leverage your Ruby skills to keep
27
27
  [testing_robots]: https://jakewharton.com/testing-robots/
28
28
  [page_objects]: https://martinfowler.com/bliki/PageObject.html
29
29
  [rspec_injection]: https://github.com/ElMassimo/capybara_test_helpers/blob/master/examples/rails_app/spec/system/cities_spec.rb#L7
30
- [rspec_global_injection]: https://github.com/ElMassimo/capybara_test_helpers/blob/master/examples/rails_app/spec/support/default_test_helpers.rb#L8
30
+ [rspec_global_injection]: https://github.com/ElMassimo/capybara_test_helpers/blob/master/examples/rails_app/spec/system/support/default_test_helpers.rb#L8
31
31
  [cucumber_injection]: https://github.com/ElMassimo/capybara_test_helpers/blob/master/examples/rails_app/features/step_definitions/city_steps.rb#L3
32
32
  [example app]: https://github.com/ElMassimo/capybara_test_helpers/blob/master/examples/rails_app
33
33
  [capybara_test_helpers_tests]: https://github.com/ElMassimo/capybara_test_helpers/blob/master/spec
@@ -37,6 +37,8 @@ Write tests that everyone can understand, and leverage your Ruby skills to keep
37
37
  [rails_integration]: https://github.com/ElMassimo/capybara_test_helpers/commit/c512e39987215e30227dad45e775480bc1348325
38
38
  [cucumber_integration]: https://github.com/ElMassimo/capybara_test_helpers/commit/68e20cb40ba409c50f88f8b745eb908fb067a0aa
39
39
 
40
+ Check out the [documentation site][docs] for more information.
41
+
40
42
  ## Why? 🤔
41
43
 
42
44
  [`capybara`][capybara] is a great library for integration tests in Ruby,
@@ -124,65 +126,63 @@ from Cucumber to RSpec.
124
126
  You can define a test helper by subclassing `Capybara::TestHelper`, which has
125
127
  full access to the Capybara DSL.
126
128
 
127
- When using Rails, you can generate a test helper by running:
128
-
129
- rails g test_helper users
130
-
131
129
  ```ruby
132
- class UsersTestHelper < Capybara::TestHelper
130
+ class CitiesTestHelper < Capybara::TestHelper
131
+ use_test_helpers(:form, :table)
132
+
133
133
  # Selectors: Semantic aliases for elements, a useful abstraction.
134
134
  SELECTORS = {
135
- el: 'table.users',
136
- form: '.user-form',
137
- submit_button: [:button, type: 'submit'],
135
+ el: 'table.cities',
138
136
  }
139
137
 
140
138
  # Getters: A convenient way to get related data or nested elements.
141
- def row_for(user)
142
- within { find(:table_row, { 'Name' => user.name }) }
139
+ def row_for(city)
140
+ within { table.row_for(city.name) }
143
141
  end
144
142
 
145
143
  # Actions: Encapsulate complex actions to provide a cleaner interface.
146
- def add(attrs)
147
- click_on('Add User')
148
- save_user(**attrs)
144
+ def add(**args)
145
+ click_on('New City')
146
+ save_city(**args)
147
+ yield(form) if block_given?
149
148
  end
150
149
 
151
- def edit(user, with:)
152
- row_for(user).click_on('Edit')
153
- save_user(**with)
150
+ def edit(city, with:)
151
+ row_for(city).click_on('Edit')
152
+ save_city(**with)
154
153
  end
155
154
 
156
- def delete(user)
157
- row_for(user).click_on('Delete')
158
- accept_confirm
155
+ def delete(city)
156
+ accept_confirm { row_for(city).click_on('Destroy') }
159
157
  end
160
158
 
161
159
  private \
162
- def save_user(name:, language:)
163
- within(:form) {
164
- fill_in('Name', with: name)
165
- choose('Language', option: language)
166
- submit_button.click
160
+ def save_city(name:)
161
+ form.within {
162
+ fill_in 'Name', with: name
163
+ form.save
167
164
  }
168
165
  end
169
166
 
170
- # Assertions: Allow to check on element properties while keeping it DRY.
171
- def have_user(name:, language:)
172
- columns = { 'Name' => name, 'Language' => language }
173
- within { have(:table_row, columns) }
167
+ # Assertions: Check on element properties, used with `should` and `should_not`.
168
+ def have_city(name)
169
+ within { have(:table_row, { 'Name' => name }) }
170
+ end
171
+
172
+ # Background: Helpers to add/modify/delete data in the database or session.
173
+ def given_there_is_a_city(name)
174
+ City.create!(name: name)
174
175
  end
175
176
  end
176
177
  ```
177
178
 
178
- To make the test helper available you can [use the `test_helpers` option in RSpec][rspec_injection],
179
- or [call `use_test_helpers` in Cucumber step definitions][cucumber_injection].
179
+ When using Rails, you can generate a test helper by running:
180
180
 
181
- For test helpers that you expect to use very often, [`use_test_helpers` allows you to make them available globally][rspec_global_injection].
181
+ $ rails g test_helper users
182
182
 
183
183
  ### Writing a Test with Helpers ✅
184
184
 
185
- You can find [this working example](https://github.com/ElMassimo/capybara_test_helpers/blob/master/examples/rails_app/spec/features/cities_spec.rb) and more in the [example app] and the [Capybara tests][capybara_test_helpers_tests].
185
+ You can find [this working example](https://github.com/ElMassimo/capybara_test_helpers/blob/master/examples/rails_app/spec/system/cities_spec.rb) and more in the [example app] and the [Capybara tests][capybara_test_helpers_tests].
186
186
 
187
187
  ```ruby
188
188
  require 'rails_helper'
@@ -216,9 +216,16 @@ RSpec.describe 'Cities', test_helpers: [:cities] do
216
216
  end
217
217
  ```
218
218
 
219
+ To make the test helper available you can use the [`test_helpers` option][rspec_injection]
220
+ in a `describe`, `context` or `scenario` as seen above.
221
+
222
+ When using Cucumber, you may call [`use_test_helpers`][cucumber_injection] in the step definitions.
223
+
224
+ Finally, for test helpers that you expect to use very often, you can [`use_test_helpers`][rspec_global_injection] in an RSpec helper module to make them available globally.
225
+
219
226
  ## DSL 🛠
220
227
 
221
- A documentation website with the full API and examples is coming soon.
228
+ A [documentation website][docs] with the full API and examples is [now available][docs] :shipit:
222
229
 
223
230
  Every single method in the [Capybara DSL] is available inside test helpers, as
224
231
  well as the [built-in RSpec matchers][rspec matchers].
@@ -228,8 +235,8 @@ well as the [built-in RSpec matchers][rspec matchers].
228
235
  You can encapsulate locators for commonly used elements to avoid hardcoding them
229
236
  in different tests.
230
237
 
231
- As a result, if the implementation changes, there are less places that need to
232
- be updated, making it faster to update tests after UI changes.
238
+ As a result, if the UI changes there are less places that need to be updated in
239
+ the tests 😃
233
240
 
234
241
  ```ruby
235
242
  class FormTestHelper < BaseTestHelper
@@ -327,13 +334,10 @@ they are both available because we are using an existing assertion.
327
334
  #### Advanced Assertions ⚙️
328
335
 
329
336
  Sometimes built-in assertions are not enough, and you need to use an expectation
330
- directly. Test helpers provide a `to_or` and `not_to` method, similar to [the
331
- technique described in this post][positive and negative assertions] that you
337
+ directly. Test helpers provide [`to_or` and `not_to` methods][positive and negative assertions] that you
332
338
  can use to implement an assertion that you can use with `should` or `should_not`.
333
339
 
334
340
  ```ruby
335
- # frozen_string_literal: true
336
-
337
341
  class CurrentPageTestHelper < BaseTestHelper
338
342
  # Getters: A convenient way to get related data or nested elements.
339
343
  def fullscreen?
@@ -93,7 +93,14 @@ module CapybaraTestHelpers::Assertions
93
93
  CapybaraTestHelpers.define_helper_method(self, method_name, target: :page, assertion: true, inject_test_helper: false)
94
94
  end
95
95
 
96
- alias have have_selector
96
+ # Public: Allows to call have_selector with a shorter syntax.
97
+ def have(*args, **kwargs, &filter)
98
+ if args.first.is_a?(Integer)
99
+ ::RSpec::CollectionMatchers::Have.new(*args, **kwargs)
100
+ else
101
+ have_selector(*args, **kwargs, &filter)
102
+ end
103
+ end
97
104
 
98
105
  # Public: Allows to check on any input value asynchronously.
99
106
  def have_value(expected_value, **options)
@@ -52,4 +52,6 @@ module CapybaraTestHelpers::Matchers
52
52
  ].each do |method_name|
53
53
  CapybaraTestHelpers.define_helper_method(self, method_name, target: :to_capybara_node)
54
54
  end
55
+
56
+ alias has? has_selector?
55
57
  end
@@ -26,7 +26,7 @@ RSpec.configure do |config|
26
26
  }
27
27
 
28
28
  # Allow injecting test helpers in a feature or scenario.
29
- %i[feature system view].each do |type|
29
+ types.each do |type|
30
30
  config.include(CapybaraTestHelpers::DependencyInjection, type: type)
31
31
  config.before(:each, type: type, &inject_test_helpers)
32
32
  end
@@ -2,5 +2,5 @@
2
2
 
3
3
  # Easily write fluent Page Objects for Capybara in Ruby.
4
4
  module CapybaraTestHelpers
5
- VERSION = '1.0.0'
5
+ VERSION = '1.0.1'
6
6
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'capybara_test_helpers'
2
4
  require 'rails/generators/named_base'
3
5
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capybara_test_helpers
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Maximo Mussini
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-11-17 00:00:00.000000000 Z
11
+ date: 2020-11-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -38,7 +38,8 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
- description:
41
+ description: Write tests that everyone can understand, and leverage your Ruby skills
42
+ to keep them easy to read and easy to change.
42
43
  email:
43
44
  - maximomussini@gmail.com
44
45
  executables: []