Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Introduce
suspenders:testing
generator (#1156)
Set up projects for an in-depth test-driven development workflow. Installs and configures [rspec-rails][], [action_dispatch-testing-integration-capybara][], [shoulda-matchers][], [webdrivers][] and [webmock][]. [rspec-rails]: https://github.com/rspec/rspec-rails [action_dispatch-testing-integration-capybara]: https://github.com/thoughtbot/action_dispatch-testing-integration-capybara [shoulda-matchers]: https://github.com/thoughtbot/shoulda-matchers [webdrivers]: https://github.com/titusfortner/webdrivers [webmock]: https://github.com/bblimke/webmock ## Details Generate `spec/rails_helper.rb` and `spec/spec_helper.rb` via `rails g rspec:intall` in an effort to not drift from what RSpec recommends out of the box. ```ruby #spec/spec_helper.rb RSpec.configure do |config| config.example_status_persistence_file_path = "tmp/rspec_examples.txt" config.order = :random config.expect_with :rspec do |expectations| expectations.include_chain_clauses_in_custom_matcher_descriptions = true end config.mock_with :rspec do |mocks| mocks.verify_partial_doubles = true end config.shared_context_metadata_behavior = :apply_to_host_groups end WebMock.disable_net_connect!( allow_localhost: true, allow: [ /(chromedriver|storage).googleapis.com/, "googlechromelabs.github.io", ] ) ``` The only thing that differs from the existing `spec/rails_helper.rb` configuration is: ```ruby config.infer_base_class_for_anonymous_controllers = false ``` ```ruby # spec/support/chromedriver.rb require "selenium/webdriver" Capybara.register_driver :chrome do |app| Capybara::Selenium::Driver.new(app, browser: :chrome) end Capybara.register_driver :headless_chrome do |app| options = ::Selenium::WebDriver::Chrome::Options.new options.headless! options.add_argument "--window-size=1680,1050" Capybara::Selenium::Driver.new app, browser: :chrome, options: options end Capybara.javascript_driver = :headless_chrome RSpec.configure do |config| config.before(:each, type: :system) do driven_by :rack_test end config.before(:each, type: :system, js: true) do driven_by Capybara.javascript_driver end end ``` ```ruby # spec/support/shoulda_matchers.rb Shoulda::Matchers.configure do |config| config.integrate do |with| with.test_framework :rspec with.library :rails end end ``` ```ruby # spec/support/i18n.rb RSpec.configure do |config| config.include ActionView::Helpers::TranslationHelper end ``` ```ruby # spec/support/action_mailer.rb RSpec.configure do |config| config.before(:each) do ActionMailer::Base.deliveries.clear end end ``` ## Notable changes This commit removes the [formulaic][] dependency. A follow-up commit could explore creating a separate one-off generator for this, but for now, we're aiming for the leanest build possible. [formulaic]: https://github.com/calebhearth/formulaic
- Loading branch information