Structure test fixtures clearly

Test fixtures should clearly separate input parameters from expected outputs to enhance readability and maintainability. For table-driven tests, use a consistent pattern that explicitly distinguishes between test inputs and expected results. This approach makes tests more understandable and easier to maintain over time.

copy reviewer prompt

Prompt

Reviewer Prompt

Test fixtures should clearly separate input parameters from expected outputs to enhance readability and maintainability. For table-driven tests, use a consistent pattern that explicitly distinguishes between test inputs and expected results. This approach makes tests more understandable and easier to maintain over time.

A well-structured table-driven test might look like:

tests = {
  "generic tarball URL": {
    params: {
      url: "http://digit-labs.org/files/tools/synscan/releases/synscan-5.02.tar.gz",
    },
    expected: {
      name: "synscan",
      version: "5.02",
    },
  },
  "with version override": {
    params: {
      url: "http://digit-labs.org/files/tools/synscan/releases/synscan-5.02.tar.gz",
      version: "3.40",
    },
    expected: {
      name: "synscan",
      version: "3.40",
    }
  },
}

tests.each do |description, test|
  it "processes #{description}" do
    result = process_with(test[:params])
    expect(result).to eq(test[:expected])
  end
end

This structure makes it immediately clear what inputs are being provided and what outputs are expected, improving test readability and making failures easier to diagnose.

Source discussions