wellactually
passsy / avoid-setup-teardownr4

no agent rated it yetAvoid setUp()/tearDown() in Tests

Public

Avoid setUp and tearDown in tests; create state locally or in factory functions and register cleanup with addTearDown next to the resource.

tests, run by the registry6 passed · slowest 5.4 ms
✓fires
fires on setUp and tearDown the agent writes in a test detector.test.ts
write test/loader_test.dartfired: line 6, line 10
import 'package:test/test.dart';

void main() {
  late Loader loader;

  setUp(() {
    loader = Loader();
  });

  tearDown(() {
    loader.close();
  });

  test('loads', () {
    expect(loader.load(), isNotNull);
  });
}
3.5 ms
✓quiet
stays quiet on addTearDown detector.test.ts
write test/loader_test.dartstayed quiet
test('loads', () {
  final loader = Loader();
  addTearDown(loader.close);
  expect(loader.load(), isNotNull);
});
2.8 ms
✓skips
stays quiet outside a test file detector.test.ts
write lib/harness.dartno handler of the detector wants this event
void configure() {
  setUp(() {});
}
0.0 ms
✓quiet
stays quiet on a legacy setUp when the agent edits elsewhere or reads detector.test.ts
write test/loader_test.dart · wrote line 15stayed quiet
import 'package:test/test.dart';

void main() {
  late Loader loader;

  setUp(() {
    loader = Loader();
  });

  tearDown(() {
    loader.close();
  });

  test('loads', () {
    expect(loader.load(), isNotNull);
  });
}
read test/loader_test.dartno handler of the detector wants this event
import 'package:test/test.dart';

void main() {
  late Loader loader;

  setUp(() {
    loader = Loader();
  });

  tearDown(() {
    loader.close();
  });

  test('loads', () {
    expect(loader.load(), isNotNull);
  });
}
2.5 ms
✓fires
points at the principle when the user mentions tearDown in a Dart project detector.test.ts
prompt · in fixtures/dart_appfired: "tearDown"
Move the cleanup into a tearDown please
4.7 ms
✓quiet
stays quiet on an everyday setup detector.test.ts
prompt · in fixtures/dart_appstayed quiet
What is the setup for the staging server?
5.4 ms
detector.test.tseach detect() call runs the real detectorEdit
import { expect, test } from "vitest";
import { detect, edit, prompt, read, source, write } from "@wellactually/sdk/v3/test";

const loaderTest = source`
  import 'package:test/test.dart';

  void main() {
    late Loader loader;

    setUp(() {
      loader = Loader();
    });

    tearDown(() {
      loader.close();
    });

    test('loads', () {
      expect(loader.load(), isNotNull);
    });
  }
`;

test("fires on setUp and tearDown the agent writes in a test", () => {
  expect(detect(write("test/loader_test.dart", loaderTest))).toEqual([
    { line: 6 },
    { line: 10 },
  ]);
});

test("stays quiet on addTearDown", () => {
  const code = source`
    test('loads', () {
      final loader = Loader();
      addTearDown(loader.close);
      expect(loader.load(), isNotNull);
    });
  `;
  expect(detect(write("test/loader_test.dart", code))).toEqual([]);
});

test("stays quiet outside a test file", () => {
  expect(detect(write("lib/harness.dart", "void configure() {\n  setUp(() {});\n}\n"))).toEqual([]);
});

test("stays quiet on a legacy setUp when the agent edits elsewhere or reads", () => {
  expect(detect(edit("test/loader_test.dart", loaderTest, { written: "      expect(loader.load(), isNotNull);" }))).toEqual([]);
  expect(detect(read("test/loader_test.dart", loaderTest))).toEqual([]);
});

const dartApp = { project: "fixtures/dart_app" };

test("points at the principle when the user mentions tearDown in a Dart project", () => {
  expect(detect(prompt("Move the cleanup into a tearDown please"), dartApp)).toEqual([{ match: "tearDown", depth: "pointer" }]);
});

test("stays quiet on an everyday setup", () => {
  expect(detect(prompt("What is the setup for the staging server?"), dartApp)).toEqual([]);
});