Fixtures are the officially supported way to handle test data and lately they are getting some attention finally. I guess I am not the only developer who started with FactoryGirl because there was more tutorials about it that time, and it seemed a really great way to handle test data as a junior ruby developer. As time went by, the projects I was working on grew and I realized that my test suite's speed issues are mostly related to my factories. So I decided to give a shot to Fixtures. It was a quite positive experience and fixtures made a huge impact on the speed of test runs. But enough of the story about me let's see how can you use fixtures with Rails.
Fixtures are stored in a yaml file but they are also processed with ERB before sent to the yaml parser, so we can use Ruby to make them dinamic. Let's use the good old blog example:
# posts.yml
post_one:
id: 1
title: First Post
published_at: <%= 1.day.ago %>
post_two:
id: 1
title: Second Post
published_at: <%= Time.now %>
# users.yml
greg:
name: Greg
email: ...
# posts.yml
post_one:
title: First Post
author: greg
published_at: <%= 1.day.ago %>
You can also implement somewhat of an inheritence in your fixtures by using the `DEFAULTS` label:
# posts.yml
DEFAULTS: &DEFAULTS
active: true
tags: "foo, bar"
post_one:
title: First Post
author: greg
<<: *DEFAULTS
post_two:
title: Second Post
author: greg
<<: *DEFAULTS
This can be handy if your fixtures shares multiple attributes with the same values.
Brandon Hilkert also shared his 7 reason of switching to fixtures and Minitest, which is a great reading: 7 REASONS aHY I'M STICKING WITH MINITEST AND FIXTURES IN RAILS
I hope this little write up will make you to give a try to fixtures if you are not using them now.
Did you enjoy reading this? Sign up to the Rails Tricks newsletter for more content like this!
Or follow me on Twitter
I run an indie startup providing vulnerability scanning for your Ruby on Rails app.
It is free to use at the moment, and I am grateful for any feedback about it.If you would like to give it a spin, you can do it here: Vulnerability Scanning for your Ruby on Rails app!