Spreewald 4.3.3 released
Built-in support for Rails and Bootstrap error classes reduces step overrides, while configurable error classes, XPath selectors, and optional negation improve flexibility.
Use CSS attribute selectors with Capybara
Quoted CSS attribute selectors let Capybara check meta tags reliably; unquoted values can trigger Nokogiri CSS syntax errors.
Setting nil values in Machinist blueprints
Blueprint attributes in Machinist can keep inherited values unless nil is wrapped in a block; editor { nil } clears the master value, plain nil does not.
Customize path for Capybara "show me the page" files
Capybara's save_and_open_page files can clutter the Rails root when debugging Cucumber scenarios. Set Capybara.save_and_open_page_path to store them elsewhere.
One-liner syntax in RSpec's should-based and expect-based syntaxes
RSpec one-liners can assert expectations on subject with implicit example descriptions, using should or is_expected in expect-based syntax.
whenever: Make runner commands use bundle exec
whenever runner jobs can fail in cron because bundle exec is omitted, leading to Bundler load errors. A custom job_type restores the correct Rails runner command.
Run a single example group in RSpec
Run one RSpec example group or a single it example by line number in a long spec without executing the whole file.
The Bark Blog » Testing Rails Model Plugins
Unfortunately, by default plugin tests are pretty bland. They use the plain unit test suite supplied by Ruby, and not any of the extended Rails test framework. This will leave our plugin’s test classes with no access to fixtures, database.yml configuration, or any of those nice class auto-loading features.
How to enable template coverage support for simplecov
Template and eval coverage in Ruby can be tracked with SimpleCov from Ruby 3.2 onward, including Haml and ERB templates.
rake spec + rails_admin = weirdly failing specs
rails_admin specs can pass with rspec but fail under rake spec; setting ENV['SKIP_RAILS_ADMIN_INITIALIZER'] = 'false' in spec_helper restores the initializer.
Debugging Google Analytics
Analytics tracking can be hard to verify in the browser; a Chrome extension swaps in a debug version and prints tracking details to the JavaScript console.
Rspec_spinner or cucumber_spinner get into an infinite loop
mathn can make rspec_spinner and cucumber_spinner loop forever while rendering the progress bar.
Check apache config files' syntax
Validate Apache configuration syntax with apache2ctl configtest or apache2ctl -t; passing checks do not guarantee a successful server start.
JavaScript Sentry: How to check if errors will be reported
Quickly verify that a JavaScript Sentry setup reports browser errors by triggering a deliberate exception in a click handler.
Debian/Ubuntu: See what "apt" would install without actually doing it
Check which packages and versions apt would install before making changes. --dry-run simulates upgrades without touching the system.
You can now override all Spreewald steps with more specific versions
Avoid Cucumber::Ambiguous by defining a more specific step that overrides a generic one in Spreewald 1.5.0+.
Machinist blueprints do not work with a column :display
display conflicts with a reserved Machinist blueprint name, so a blueprint attribute using that label may fail unexpectedly.
Background - cucumber - GitHub
Shared setup adds context to scenarios in a feature and runs before each scenario, after Before hooks.
Pre-releasing a Ruby gem
Release candidate and beta gem versions are treated as pre-releases and are ignored unless explicitly requested; RubyGems converts dash-separated SemVer pre-release tags to dot-separated versions.
Pre-releasing an npm package
Publish npm pre-release versions on a separate tag so stable users do not receive alpha or beta builds by default.
Timecop creates records in the past after calling Timecop.freeze
Timecop 0.3.4 and earlier can create records with timestamps in the past after Timecop.freeze; upgrading to 0.3.5 avoids the bug.
RSpec 1.x matcher for delegations
Custom RSpec matcher for verifying delegated methods in Ruby models, including prefixed delegation like author_name.
Strong params: Raise in development if unpermitted params are found
Unpermitted request data can slip into Rails controllers unless action_on_unpermitted_parameters is set to log or raise; development can fail fast on unexpected keys.
Let Webrat make a POST request
Webrat can submit a page request as POST by passing :post to visit, useful when a path must be tested with form-style submission.