Skip to content

Commit 7cb55ac

Browse files
committed
Use FactoryBo#reload to reset factory bot
fixes #66
1 parent 8d8fdde commit 7cb55ac

File tree

6 files changed

+25
-25
lines changed

6 files changed

+25
-25
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,4 @@ spec/examples.txt
55
.idea
66
spec/test.log
77
pkg/*.gem
8+
vendor/bundle

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
### Changed
2+
* Use `FactoryBo#reload` to reset factory bot
3+
14
## [1.7.0]
25
[Compare]: https://github.com/shakacode/cypress-on-rails/compare/v1.6.0...v1.7.0
36

cypress-on-rails.gemspec

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ Gem::Specification.new do |s|
1919
s.add_development_dependency 'rake'
2020
s.add_development_dependency 'rspec'
2121
s.add_development_dependency 'railties', '>= 3.2'
22+
s.add_development_dependency 'factory_bot'
2223
s.metadata = {
2324
"bug_tracker_uri" => "https://github.com/shakacode/cypress-on-rails/issues",
2425
"changelog_uri" => "https://github.com/shakacode/cypress-on-rails/blob/master/CHANGELOG.md",

lib/cypress_on_rails/simple_rails_factory.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,9 @@ def self.create_list(type, amount, *params)
1212
create(type,*params)
1313
end
1414
end
15+
16+
# to be API compatible with factorybot
17+
def self.definition_file_paths=(*); end
18+
def self.reload; end
1519
end
1620
end

lib/cypress_on_rails/smart_factory_wrapper.rb

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,6 @@
33

44
module CypressOnRails
55
class SmartFactoryWrapper
6-
module FactoryCleaner
7-
def self.clean(f = FactoryBot)
8-
f.factories.clear if f.respond_to?(:factories)
9-
f.traits.clear if f.respond_to?(:traits)
10-
f.callbacks.clear if f.respond_to?(:callbacks)
11-
f.sequences.clear if f.respond_to?(:sequences)
12-
end
13-
end
14-
156
def self.instance
167
@instance ||= new(files: [], factory: SimpleRailsFactory)
178
end
@@ -33,14 +24,13 @@ def self.create_list(*args)
3324
attr_accessor :always_reload
3425

3526
def initialize(files:, factory:, always_reload: false,
36-
factory_cleaner: FactoryCleaner, kernel: Kernel, file_system: File,
37-
dir_system: Dir)
27+
kernel: Kernel, file_system: File, dir_system: Dir)
3828
self.files = files
3929
self.factory = factory
30+
factory.definition_file_paths = []
4031
self.always_reload = always_reload
4132
@kernel = kernel
4233
@file_system = file_system
43-
@factory_cleaner = factory_cleaner
4434
@latest_mtime = nil
4535
@dir_system = dir_system
4636
end
@@ -83,7 +73,7 @@ def load_files
8373
return unless should_reload?(current_latest_mtime)
8474
logger.info 'Loading Factories'
8575
@latest_mtime = current_latest_mtime
86-
@factory_cleaner.clean(factory)
76+
factory.reload
8777
files.each do |file|
8878
logger.debug "-- Loading: #{file}"
8979
@kernel.load(file)

spec/cypress_on_rails/smart_factory_wrapper_spec.rb

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
require 'cypress_on_rails/smart_factory_wrapper'
2+
require 'factory_bot'
23

34
RSpec.describe CypressOnRails::SmartFactoryWrapper do
45
FileSystemDummy = Struct.new(:file_hash) do
@@ -10,8 +11,9 @@ def mtime(filename)
1011
let(:time_now) { Time.now }
1112
let(:mtime_hash) { {'file1.rb' => time_now, 'file2.rb' => time_now } }
1213
let(:files) { %w(file1.rb file2.rb) }
13-
let(:factory_double) { double('FactoryBot', create: true, create_list: true) }
14-
let(:factory_cleaner) { class_double(CypressOnRails::SmartFactoryWrapper::FactoryCleaner, clean: true) }
14+
let(:factory_double) do
15+
class_double(FactoryBot, create: nil, create_list: nil, "definition_file_paths=": nil, reload: nil)
16+
end
1517
let(:kernel_double) { class_double(Kernel, load: true) }
1618
let(:file_double) { FileSystemDummy.new(mtime_hash) }
1719
let(:dir_double) { class_double(Dir) }
@@ -25,8 +27,7 @@ def mtime(filename)
2527
factory: factory_double,
2628
kernel: kernel_double,
2729
file_system: file_double,
28-
dir_system: dir_double,
29-
factory_cleaner: factory_cleaner)
30+
dir_system: dir_double)
3031
end
3132

3233
it 'loads all the files on first create it' do
@@ -68,7 +69,7 @@ def mtime(filename)
6869

6970
it 'wont load the files if they have not changed' do
7071
subject.create(:user)
71-
subject.create_list(:user)
72+
subject.create_list(:user, 2)
7273
expect(kernel_double).to have_received(:load).with('file1.rb').once
7374
expect(kernel_double).to have_received(:load).with('file2.rb').once
7475
end
@@ -79,7 +80,7 @@ def mtime(filename)
7980
expect(kernel_double).to have_received(:load).with('file2.rb').once
8081

8182
mtime_hash['file1.rb'] = Time.now
82-
subject.create_list(:user)
83+
subject.create_list(:user, 2)
8384
expect(kernel_double).to have_received(:load).with('file1.rb').twice
8485
expect(kernel_double).to have_received(:load).with('file2.rb').twice
8586
end
@@ -91,24 +92,24 @@ def mtime(filename)
9192
expect(kernel_double).to have_received(:load).with('file2.rb').once
9293

9394
mtime_hash.delete('file1.rb')
94-
subject.create_list(:user)
95+
subject.create_list(:user, 2)
9596
expect(kernel_double).to have_received(:load).with('file1.rb').once
9697
expect(kernel_double).to have_received(:load).with('file2.rb').twice
9798
end
9899

99-
it 'will reset factory if a has changed' do
100+
it 'will reset factory if a file has changed' do
100101
subject.create(:user)
101-
expect(factory_cleaner).to have_received(:clean).with(factory_double)
102+
expect(factory_double).to have_received(:reload)
102103

103104
mtime_hash['file1.rb'] = Time.now
104-
subject.create_list(:user)
105+
subject.create_list(:user, 2)
105106

106-
expect(factory_cleaner).to have_received(:clean).with(factory_double).twice
107+
expect(factory_double).to have_received(:reload).twice
107108
end
108109

109110
it 'will always reload the files enabled' do
110111
subject.always_reload = true
111-
subject.create_list(:user)
112+
subject.create_list(:user, 2)
112113
subject.create(:user)
113114
expect(kernel_double).to have_received(:load).with('file1.rb').twice
114115
expect(kernel_double).to have_received(:load).with('file2.rb').twice

0 commit comments

Comments
 (0)