Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
# 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

This comment has been minimized.

Copy link
Owner Author

cupakromer commented Jun 10, 2015

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
You can’t perform that action at this time.