This is a personal post-mortem analysis of a project that was mainly build to provide a REST API to...

PostgreSQL and ActiveRecord have a good support for storing dynamic attributes (hashes) in columns of type JSONB. But sometimes you...

Sometimes, you might have duplicate links on a page. Trying to click those links will by default cause Capybara to...

medium.com

Root Insurance runs their application as a monolithic Rails application – but they've modularized it inside its repository. Here is...

When you have two inputs, where one contains the name of the other (eg. Name and Name with special treatment...

Debugging image color profiles is hard. You can't trust your eyes in this matter, as the image rendering depends...

To test that an object was constructed by a given constructor function, use jasmine.any(Klass): describe('plus()', function() { it ('returns...

If you want to make your Rails application be capable of sending SMTP emails, check out the action mailer configuration...

When tests might not run with skipping RSpec in the RSpec.describe failing with the error undefined method 'describe' for main...

makandra dev

Fixed #68: The "cucumber" command now fails early when @solo features fail. Added: The "setup" command now prints the db...

There is a kind of features in web applications that hinder automated integration tests. Examples include cookie consent banners or...

api.rubyonrails.org

ActiveSupport (since 4.1) includes test helpers to manipulate time, just like the Timecop gem: To freeze the current time, use...

Capybara provides execute_script and evaluate_script to execute JavaScript code in a Selenium-controlled browser. This however is not...

Most of the time it is a tedious task to apply a code style guide to an existing code...

When using Chrome for Selenium tests, the chromedriver binary will be used to control Chrome. To debug problems that stem...

The main benefit of our convention to prefix commits by their corresponding Pivotal Tracker ID is that we can easily...

When upgrading Clearance, pay attention whether the password hashing strategy might have changed. Old clearance versions (< 1.0) used SHA1-encrypted...

You can share a state in Ruby with global variables. Even if you should avoid them whenever possible, for debugging...

makandra dev

General hints on the DOM the root of the DOM is document custom elements inherit from HTMLElement. They need a...

When an AJAX request raises an exception on the server, Rails will show a minimal error page with only basic...

blog.cloudflare.com

Two weeks ago, Cloudflare was struck by a global outage that lasted ~30 minutes. The incident was rooted on a...

makandra dev

webpack is a very powerful asset bundler written in node.js to bundle (ES6) JavaScript modules, stylesheets, images, and other assets...

RubyMine comes with a nice way to grep through your project's files: The finder (ctrl + shift + f). Don't...

Element finding is a central feature of Capybara. Since #find is normally used to get elements from the current page...