       assert paths === expected_paths
     end
 
-    test "fails if the returned value is not a list", ctx do
-      assert {:error, msg} = get_templates(ctx.super_weird_1)
+    test "fails if the returned value is not a list" do
+      load(Serum.SuperWeirdTheme1)
+
+      assert {:error, msg} = get_templates()
       assert String.contains?(msg, "Serum.SuperWeirdTheme1.get_templates")
       assert String.contains?(msg, inspect("/foo/bar/baz.html.eex"))
     end
 
-    test "fails if the returned list has non-binary values", ctx do
-      assert {:error, msg} = get_templates(ctx.super_weird_2)
+    test "fails if the returned list has non-binary values" do
+      load(Serum.SuperWeirdTheme2)
+
+      assert {:error, msg} = get_templates()
       assert String.contains?(msg, "Serum.SuperWeirdTheme2.get_templates")
       assert String.contains?(msg, inspect(42))
     end
 
-    test "may also fail in some other cases", ctx do
-      assert {:error, msg} = get_templates(ctx.failing)
+    test "may also fail in some other cases" do
+      load(Serum.FailingTheme)
+
+      assert {:error, msg} = get_templates()
       assert String.contains?(msg, "test error from get_templates/0")
     end
 
-    test "does nothing if the theme module is nil", ctx do
-      assert {:ok, %{}} === get_templates(ctx.null)
+    test "does nothing if the theme module is nil" do
+      load(nil)
+
+      assert {:ok, %{}} === get_templates()
     end
   end
 
   describe "get_assets/1" do
-    test "successfully retrieves a path", ctx do
+    test "successfully retrieves a path" do
       tmp_path = get_tmp_dir("serum_test_")
       {:ok, agent} = Agent.start_link(fn -> tmp_path end, name: Serum.TestAgent)
+      {:ok, _theme} = load(Serum.DummyTheme)
 
       File.mkdir_p!(tmp_path)
-      assert {:ok, tmp_path} === get_assets(ctx.dummy)
+      assert {:ok, tmp_path} === get_assets()
       File.rm_rf!(tmp_path)
 
       :ok = Agent.stop(agent)
     end
 
-    test "returns false to indicate that no asset will be copied", ctx do
-      assert {:ok, false} === get_assets(ctx.empty)
-    end
-
-    test "fails if the returned path is not a directory", ctx do
+    test "returns false to indicate that no asset will be copied" do
+      {:ok, _theme} = load(Serum.EmptyTheme)
+
+      assert {:ok, false} === get_assets()
+    end
+
+    test "fails if the returned path is not a directory" do
       tmp_path = get_tmp_dir("serum_test_")
       {:ok, agent} = Agent.start_link(fn -> tmp_path end, name: Serum.TestAgent)
+      {:ok, _theme} = load(Serum.WeirdTheme)
       expected = {:error, {:enotdir, tmp_path, 0}}
 
       File.touch!(tmp_path)
-      assert expected === get_assets(ctx.weird)
+      assert expected === get_assets()
       File.rm_rf!(tmp_path)
 
       :ok = Agent.stop(agent)
     end
 
-    test "fails if the returned value is not a binary", ctx do
-      assert {:error, msg} = get_assets(ctx.super_weird_1)
+    test "fails if the returned value is not a binary" do
+      load(Serum.SuperWeirdTheme1)
+
+      assert {:error, msg} = get_assets()
       assert String.contains?(msg, inspect(42))
     end
 
-    test "may also fail in some other cases", ctx do
-      assert {:error, msg} = get_assets(ctx.failing)
+    test "may also fail in some other cases" do
+      load(Serum.FailingTheme)
+
+      assert {:error, msg} = get_assets()
       assert String.contains?(msg, "test error from get_assets/0")
     end
 
-    test "does nothing if the theme module is nil", ctx do
-      assert {:ok, false} === get_assets(ctx.null)
+    test "does nothing if the theme module is nil" do
+      load(nil)
+
+      assert {:ok, false} === get_assets()
     end
   end
 end

      assert paths === expected_paths
    end

    test "ignores invalid items", ctx do
      assert {:ok, %{} = paths} = get_templates(ctx.weird)

      expected_paths = %{
        "base" => "/foo/bar/templates/base.html.eex",

  |> Enum.each(&Code.require_file/1)

  setup_all do
    {:ok, io_opts} = IOProxy.config()

    IOProxy.config(mute_err: false)
    on_exit(fn -> IOProxy.config(Keyword.new(io_opts)) end)

    :ok
  end

  describe "load/1" do
