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