版本 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
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 自动生成的文档。