Skip to content

Instantly share code, notes, and snippets.

@cupakromer
Forked from soulcutter/tracked_let.rb
Last active August 29, 2015 14:22
Show Gist options
  • Save cupakromer/79d3f4255ec63ed51cad to your computer and use it in GitHub Desktop.
Save cupakromer/79d3f4255ec63ed51cad to your computer and use it in GitHub Desktop.
# transaction/truncation strategies won't work when you have a
# capybara feature and you must preserve what's already in the
# database
#
# Usage:
# include TrackedLet
#
# track(:foo) { User.create }
# track!(:foo) { User.create }
# specify { expect(track(User.create)).to be_persisted }
module TrackedLet
module TrackHelper
def track(key, &block)
let(key) do
instance_eval(&block).tap { |x| __test_records << x }
end
end
def track!(key, &block)
let!(key) do
instance_eval(&block).tap { |x| __test_records << x }
end
end
end
def track(value)
__test_records << value
value
end
def self.included(mod)
mod.extend TrackHelper
mod.instance_eval do
let(:__test_records) { Array.new }
after { __test_records.each(&:destroy) }
end
end
end
@cupakromer
Copy link
Author

Reasons for needing:

  • we don't want to wipe the staging data that our customer may be toying with when we run tests
  • capybara doesn't have access to what's in a transaction

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment