Don't build randomness into your factories

Updated . Posted . Visible to the public. Repeats.

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 Show archive.org snapshot . 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:

FactoryBot.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.

Profile picture of Henning Koch
Henning Koch
Last edit
Felix Eschey
Keywords
blueprints, factory_girl, machinist
License
Source code in this card is licensed under the MIT License.
Posted by Henning Koch to makandra dev (2014-02-24 11:31)