Posted over 6 years ago. Visible to the public. Repeats.

Don't build randomness into your factories

Tests are about 100% control over UI interaction and your test scenario. Randomness makes writing tests hard. You will also push tests that are green for you today, but red for a colleague tomorrow.

That said, please don't do something like this:

Factory(:document) do |document| document.category { ['foo', 'bar', 'baz'].sample } end

Instead do this:

Factory(:document) do |document| document.category 'foo' end

The case against Faker

I even recommend to not use libraries like Faker. Faker makes awesome sample data, but at the risk of adding random strings to your screen. When your factory requires unique values for something, prefer numbering fixed strings intead:

FactoryGirl.define do sequence(:first_name) { |i| "First#{i}" } sequence(:last_name) { |i| "Last#{i}" } sequence(:company_name) { |i| "Company #{i}" } end

This creates ugly sample data like "First3 Last3", but e.g. doesn't make tests pass when they shouldn't.

Once an application no longer requires constant development, it needs periodic maintenance for stable and secure operation. makandra offers monthly maintenance contracts that let you focus on your business while we make sure the lights stay on.

Owner of this card:

Henning Koch
Last edit:
over 2 years ago
by Henning Koch
blueprints, factory_girl, machinist
About this deck:
We are makandra and do test-driven, agile Ruby on Rails software development.
License for source code
Posted by Henning Koch to makandra dev
This website uses cookies to improve usability and analyze traffic.
Accept or learn more