跳至内容

版本 0.15 包含两个重要的重大变更

  • 对于每个具有映射模式的 GivenProperty,必须将 inherit_via 指定为 OVERRIDE 或 REPLACE。

  • 如果父级故事有步骤,子级故事必须指定“替换步骤”或“后续步骤”,而不是“步骤”。

代码示例

example.story

Create files:
  given:
    browser:
      type: chrome
      size: 1024x768
  steps:
   - Add product:
      name: Towel
      quantity: 3

带代码

from hitchstory import StoryCollection
from engine import Engine
from pathlib import Path

collection = StoryCollection(Path(".").glob("*.story"), Engine())

具有映射模式的 GivenProperty 指定了 inherit_via

在这个示例中,未在 GivenProperty 上指定 inherit_via。

engine.py

from hitchstory import BaseEngine, GivenDefinition, GivenProperty, validate
from strictyaml import Int, Map, Str

class Engine(BaseEngine):
    given_definition = GivenDefinition(
        browser=GivenProperty(
            schema=Map({"type": Str(), "size": Str()}),
        ),
    )

    @validate(quantity=Int())
    def add_product(self, name, quantity):
        pass
collection.one().play()

没有映射模式的 GivenProperty 不应指定 inherit_via

在这个示例中,在 GivenProperty 模式上指定了 inherit_via,并指定了 strictyaml Any 模式。如果使用 Seq()、Str() 或 Int() 或任何其他标量验证器,它将具有相同的行为。

engine.py

from hitchstory import BaseEngine, GivenDefinition, GivenProperty, validate
from strictyaml import Int, Map, Str, Any

class Engine(BaseEngine):
    given_definition = GivenDefinition(
        browser=GivenProperty(
            schema=Any(),
            inherit_via=GivenProperty.OVERRIDE,
        ),
    )

    @validate(quantity=Int())
    def add_product(self, name, quantity):
        pass
collection.one().play()

在父级故事也有步骤的情况下,在子级故事上使用步骤

在这个示例中,父级故事有步骤,子级故事也有步骤。由于这模棱两可,从 2.0 版开始,此行为被禁止。

example_child.story

Create other files:
  based on: create files
  steps:
  - Add product:
      name: Towel
      quantity: 3
engine.py

from hitchstory import BaseEngine, GivenDefinition, GivenProperty, validate
from strictyaml import Int, Map, Str

class Engine(BaseEngine):
    given_definition = GivenDefinition(
        browser=GivenProperty(
            schema=Map({"type": Str(), "size": Str()}),
            inherit_via=GivenProperty.OVERRIDE,
        ),
    )

    @validate(quantity=Int())
    def add_product(self, name, quantity):
        pass
collection.named("Create other files").play()

可执行规范

breaking-changes-between-v014-and-v015.story storytests 自动生成的文档。