Using the Faker-Ruby gem by Faker

Or fake it until you make it.

Project four of my Software Engineering bootcamp rolls around and the requirement to have a Rails API backend was a fundamental part of the brief.

A backend, with data in it, how would I get that? Sure, there are some great free API that you can utilise for learning purposes, however I was looking for something that I had full control over as I pushed for my MVP.

A lot of my course learning material kept using database seeding with some seemingly random code called Faker::RandomData (or words to that effect). This naturally piqued my interest, fake the data, test the hypothesis, and once it’s working, I can put a full build with a clean database. The question is what is this Faker and how does it work? The following is my experience while working it out.

What is Faker-Ruby?

A quick search and I had located Faker-Ruby, the ruby focused package which generates fake data for your API/Database needs on Ruby/Rails APIs.

Sounds promising. What does that mean? Well as my preamble may have indicated, when you need a set of data in your database for testing this can help you create the seed data for testing. While it doesn’t guarantee unique values, you can specify when you do require them and Faker will do it’s best to make it happen.

How does it work?

First install the gem: gem install faker

Make sure it’s in your gem file and required within your app and it should go.

Lets fake some data! As part of my project I needed a small sample of users for some app users. Here’s what I added to my seed file:

Faking five users for my app

I asked this snippet to run 5 times, and interact with the username column of my table. It then activates the Faker package and uses the Ancient generator, specifically the heroes, I then asked for it to be in lower case, and finally I used Ruby’s global substitution gsub method along with the regex to substitute white space for an underscore.

The end result, Achilles, Dante, Hermione, Ganymede and Ajax became the first five users of my app, in lower case of course!

The astute amongst you may note I have used a user = User.create method, this is because I later needed some of my users to become foreign ID keys in other tables within my API structure.

Some oversights that I made so you don’t have to

My API had three separate methods being seeded, including a many-to-many relationship. Initially I tried to populate the many-to-many table before the two foreign keys were fully faked, this meant the request was ignored, some hasty re-arrangement of the order and it worked.

I then refactored the seed code to use the create User seed to also be the lead foreign key in the many-to-many relationship table. This enabled me to use a rand(5..10).times do so my users had between 5 and 10 of the different McGuffins from the static table. Handy.

Bonus: the quickest way to reset and reseed a db is to use the rails db:reset this drops and recreates the database from db/schema.rb for the current environment and loads the seeds. Which if you were happy with your models and table setups allows you to tweak the data you seed.

Thanks for joining me for this journey into Faker-Ruby, happy faking.




Former tech banker, now aspiring software engineer. Feel free to get in touch.

Love podcasts or audiobooks? Learn on the go with our new app.

Recommended from Medium

Make your React web app more accessible today!

Event Driven Microservices with Spring Cloud Stream

Alibaba Cloud Logstash JDBC Implements Data Synchronization between Elasticsearch and Relational…

How to deploy Firebase Preview Channels on Travis CI

Data Normalization: Hashtables vs. Arrays

And on the second day, there was…

Class Methods versus Instance Methods in Ruby

Azure Blob Storage Upload File.Net Core

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Alex Amersi-Belton

Alex Amersi-Belton

Former tech banker, now aspiring software engineer. Feel free to get in touch.

More from Medium

Intro to ExpressJs — Response Methods

Loops and Nested Loops

Routing Introduction — Let’s Learn Adonis 5, Lesson 2.0