• This repository has been archived on 08/Feb/2019
  • Stars
    star
    175
  • Rank 218,059 (Top 5 %)
  • Language
    Ruby
  • License
    MIT License
  • Created over 11 years ago
  • Updated almost 6 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Deprecated: please note, this project is no longer being maintained

PLEASE NOTE, THIS PROJECT IS NO LONGER BEING MAINTAINED

FactoryGirl Seeds

Build Status Code Climate

Don't like factory_girl because it is slow? Do you know that creating records in DB through factory_girl can take up to 50% of total spec run time? And even more!

This tiny gem helps fix that problem by reusing data preloaded before running test suite.

Sponsored by Evrone

Demo

Without seeds:

Finished in 4 minutes 38.7 seconds
1402 examples, 0 failures, 0 pending

With seeds:

Finished in 2 minutes 40.6 seconds
1402 examples, 0 failures, 0 pending
>> (2.minutes + 40.6.seconds) / (4.minutes + 38.7.seconds)
=> 0.5762468604233943

So it is just about 58% of time before seeds optimization :)

Getting Started

Installation

Add this line to your application's Gemfile:

group :test do
  gem 'factory_girl-seeds'
end

Usage

1. Create records before test suite

FactoryGirl::SeedGenerator.create(:user, name: "Carlos Castaneda")

For example if you are using rspec then add this to config.before(:suite).

2. Use in factory definitions

This is the most important step because most of time factory_girl spends on creating associations which in turn also create associations and so on recursively.

FactoryGirl.define do
  factory :post do
    title "Demo"
    user { seed(:user) }
  end
end

3. Use in it blocks.

Also if you need standard factory without overriding attributes then do not create records. Just use one from preloaded seeds.

it "should do something" do
  user = FactoryGirl.seed(:user)

  # your code here
end

Short DSL also available:

user = seed(:user)

4. Using Factory Girl traits

You can create models via factories and traits (like create(:user, admin)), but you can not obtain it with the seed(:user, :admin). To be able to obtain a record it is recommended to define specific factories with a set of traits and unique names just like in the example in Getting stated guide:

factory :user do
  name "Friendly User"
  login { name }

  trait :male do
    name   "John Doe"
    gender "Male"
  end

  trait :female do
    name   "Jane Doe"
    gender "Female"
  end

  trait :admin do
    admin true
  end

  factory :male_admin,   traits: [:male, :admin]
  factory :female_admin, traits: [:admin, :female]
end

When factories declared in this manner, you can obtain a record with seed(:male_admin)

FactoryGirl::SeedGenerator.create method creates record in DB before transaction begins. Then it block starts transaction so when you update record returned by FactoryGirl.seed it is wrapped in transaction. This guarantees that every it block works with clean record.

Contributing

Please read Code of Conduct and Contributing Guidelines for submitting pull requests to us.

Versioning

We use SemVer for versioning. For the versions available, see the tags on this repository.

Changelog

The changelog is here.

Authors

See also the list of contributors who participated in this project.

License

This project is licensed under the MIT License.

More Repositories

1

go-clean-template

Clean Architecture template for Golang services
Go
6,198
star
2

postcss-px-to-viewport

A plugin for PostCSS that generates viewport units (vw, vh, vmin, vmax) from pixel units. The best choice to create a scalable interface on different displays by one design size.
JavaScript
3,023
star
3

quiet_assets

DEPRECATED: As of sprockets-rails version 3.1.0, used in current versions of rails, this gem is deprecated
Ruby
1,415
star
4

inboxes

DEPRECATED: please note, this project is no longer being maintained
Ruby
117
star
5

flutter_audio

A Flutter audio-plugin to playing and recording sounds
Java
108
star
6

capistrano-team_notifications

DEPRECATED: please note, this project is no longer being maintained
Ruby
102
star
7

carrierwave-video-thumbnailer

A thumbnailer plugin for Carrierwave that makes easy thumbnailing of your uploaded videos
Ruby
93
star
8

evrone-python-guidelines

Evrone Python team code guidelines
74
star
9

evroneCrop

DEPRECATED: please note, this project is no longer being maintained
JavaScript
53
star
10

normas

Normal Lightweight Javascript Framework for server-side render compatible with Turbolinks
JavaScript
31
star
11

docker-machine-vscale

Vscale docker machine driver
Go
27
star
12

lxc-frontend

DEPRECATED: please note, this project is no longer being maintained
Ruby
23
star
13

omniauth-yandex

Omniauth 1.0 strategy for Yandex.ru
Ruby
22
star
14

glider

DEPRECATED: please note, this project is no longer being maintained
CoffeeScript
19
star
15

evrone-django-template

Simple and ready to go Django Template.
Python
17
star
16

casbin-ruby

An authorization library that supports access control models like ACL, RBAC, ABAC in Ruby
Ruby
16
star
17

yandex-cleanweb

DEPRECATED: please note, this project is no longer being maintained
Ruby
16
star
18

spree_autosuggest

DEPRECATED: please note, this project is no longer being maintained
Ruby
16
star
19

masquito

Deprecated: please note, this project is no longer being maintainedplease note, this project is no longer being maintained
Ruby
15
star
20

vscale_api

Api client for Vscale (http://vscale.io) like godo
Go
15
star
21

capistrano_evrone_recipes

DEPRECATED: please note, this project is no longer being maintained
Ruby
13
star
22

toggl-python

Python
12
star
23

ultimate-helpers

DEPRECATED: please note, this project is no longer being maintained
CoffeeScript
11
star
24

irake

Lightning fast rake (in rails console)
Ruby
11
star
25

rails-settings-ui

DEPRECATED: This project was moved to another location - https://github.com/accessd/rails-settings-ui
Ruby
11
star
26

dev_must_have

Meta gem for must have Rails development gems
Ruby
10
star
27

glider-rails

DEPRECATED: please note, this project is no longer being maintained
CoffeeScript
9
star
28

activerecord-vertica-adapter

ActiveRecord adapter for Vertica database based on pg adapter
Ruby
8
star
29

ultimate-mixins

Simple library of SASS functions, mixins and basic polyfills
CSS
8
star
30

migration_opener

DEPRECATED: please note, this project is no longer being maintained
Ruby
8
star
31

polemic

Commentable engine for Rails 3
Ruby
8
star
32

worldcities

Deprecated: please note, this project is no longer being maintainedplease note, this project is no longer being maintained
Ruby
6
star
33

foreman_export_runitu

Foreman exporter to runit, unlike original runit exporter, does it without sudo
Ruby
6
star
34

localizator

Ruby
6
star
35

liker

Fetches the count of likes for specified URL in social networks
Ruby
5
star
36

evrone_opensource

Improve READMEs of opensource projects
Ruby
5
star
37

gitlab-campfire-hook

DEPRECATED: please note, this project is no longer being maintained
Ruby
5
star
38

runit-bootstrap

Bootstraps runit user instance on Ubuntu
Shell
4
star
39

mega-copy

Automated refactoring for Python (and not only) files
Python
4
star
40

withardry

A simple plugin to DRY models
Ruby
4
star
41

vocabulary

Wrapper for unofficial Google Dictionary API
Ruby
4
star
42

notification_troubleshoot

Java
4
star
43

ekey

Ruby wrapper of API of the ekey.ru
Ruby
4
star
44

bmstu_2024

Ruby
4
star
45

destiny

Dice roller in d&d style for one of our projects
Ruby
3
star
46

terraform-yandex-postgres

HCL
3
star
47

terraform-yandex-vpc

HCL
2
star
48

activejob_nats_adapter

Ruby
2
star
49

yandex_direct_api

DEPRECATED: please note, this project is no longer being maintained
Ruby
2
star
50

octoshell-extend

DEPRECATED: please note, this project is no longer being maintained
Ruby
2
star
51

wheremymates

DEPRECATED: please note, this project is no longer being maintained
Ruby
1
star
52

twilio-sdk

Dart
1
star
53

terraform-yandex-iam

HCL
1
star
54

evrone_open_source_template

Evrone Open Source Template
1
star