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.

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)