class Cutlass::CleanTestEnv
Ensure that your environment variables and docker images aren't leaking in tests
Docker image leaking is disabled by default in development. Set CUTLASS_CHECK_DOCKER in CI.
CleanTestEnv.record CleanTestEnv.check(docker: true) # => nil BashResult.run("docker build .") CleanTestEnv.check(docker: true) # => Error: Docker images have leaked
The common practice is to use this in rspec hooks
config.before(:suite) do Cutlass::CleanTestEnv.record end config.after(:suite) do Cutlass::CleanTestEnv.check end
Public Class Methods
check(docker: ENV["CUTLASS_CHECK_DOCKER"])
click to toggle source
# File lib/cutlass/clean_test_env.rb, line 43 def self.check(docker: ENV["CUTLASS_CHECK_DOCKER"]) check_env check_images if docker end
check_env()
click to toggle source
# File lib/cutlass/clean_test_env.rb, line 48 def self.check_env raise "Must call `record` first" if @env_diff.nil? return if @env_diff.same? raise <<~EOM Something mutated the environment on accident Diff: #{@env_diff} EOM end
check_images()
click to toggle source
# File lib/cutlass/clean_test_env.rb, line 60 def self.check_images diff = @docker_diff.call return if diff.same? raise <<~EOM Docker images have leaked Your tests are generating docker images that were not cleaned up #{diff} EOM end
record(docker: ENV["CUTLASS_CHECK_DOCKER"])
click to toggle source
# File lib/cutlass/clean_test_env.rb, line 38 def self.record(docker: ENV["CUTLASS_CHECK_DOCKER"]) @env_diff = EnvDiff.new(skip_keys: @skip_keys) @docker_diff = DockerDiff.new if docker end
skip_key(key)
click to toggle source
# File lib/cutlass/clean_test_env.rb, line 34 def self.skip_key(key) @skip_keys << key end