Skip to content

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 04 Oct 12:51

Added

  • Python 3.15 is supported.
  • Hovering a phase in the HTML report's narration, or a column of its parameter table, highlights that phase in both.
  • Scenarios that fail as expected (xfail) get their own xfailed status, with their reason, steps and error, in every report format.

Changed

  • The parameter table orders its columns the way the narration first shows them, and shows its status column only when the cases differ in status.
  • The HTML report's Stories view shows each scenario as a full card that expands in place, and a tag clicked there opens the Scenarios view filtered by it.
  • The HTML report is visually tidied: term refs, the Glossary view, story coverage, narration spacing, hover states and the header row are restyled, and a parametrized scenario is marked by a second status bar.
  • The bundled pytest-given-authoring skill asks for one scenario per rule and covers parametrized scenarios as decision tables, and the pytest-given-reviewing skill catches more ways scenarios, glossary rows, pins, tags and parameter tables can disagree.

Fixed

  • A @given fixture parametrized with an unhashable value, such as a list, no longer errors every test that requests it.
  • Editor source links build {path} from pytest's rootdir instead of the working directory, so they no longer point at a doubled path when pytest runs from a subdirectory.
  • A scenario deep link stays working when the test's file or directory name contains +, &, = or #.
  • A parametrize value of infinity or NaN reaches the JSON report as a string ("inf", "nan"), so the report stays valid JSON.
  • A @given generator fixture that yields twice errors with pytest's own "more than one 'yield'" message, as it does without pytest-given, instead of passing silently.
  • An Annotated[..., given(Template(...))] label whose placeholder is not a bare parametrize column name now fails its scenario with the fix, instead of crashing the HTML report or silently dropping the step.
  • A scenario failing on a pytest-given refusal raised from its test body points at the test's own line, not at pytest-given's.
  • Error messages are clearer: a FileGlossary table error names the file, so does a glossary file that is a directory or not UTF-8, and a step nested across phases gets a concrete fix suggested.
  • The Markdown report's note below a parameter table names the row by its short parametrize values or its row number, instead of repeating multiline values.
  • A failure inside the narration lint is summarized under pytest-given: narration lint failed, no longer as report not written beside a report that was kept.
  • The tag-shadows-term lint finding counts a scenario once when it carries two spellings of the tag, such as Guest and guest.
  • pytest-given report -o report.markdown writes Markdown, as -o report.md does, instead of refusing the path as an HTML one.
  • pytest-given report --help mentions Markdown output and says where each format goes without -o.
  • The HTML report's links keep a tag filter whose tag contains a comma, by repeating the parameter per tag or term (#tag=a&tag=b), and copying a link no longer replaces the current page's entry in the browser history.
  • The HTML report no longer says "All Scenarios" when every status is filtered out, disables a status filter no scenario has, and the Glossary view says no terms match when every kind is unchecked.
  • The HTML report's view tabs and search boxes show a visible keyboard focus ring, and a turned-off status filter keeps readable contrast.
  • The HTML report's status filters wrap onto a second row instead of being cut off in a narrow sidebar.
  • A parametrized scenario shows a skip reason only when every case was skipped, no longer its first case's reason beside cases that ran.