【问题标题】:PHPSpec: order of the class specsPHPSpec:类规范的顺序
【发布时间】:2015-07-12 11:11:15
【问题描述】:

我正在开发一个 HTTP 服务器,我第一次决定用 PHPSpec 编写 tests 规范,这很棒。

我有两个规格类:spec\AppSpecspec\RequestParserSpec

由于App 是服务器组件和外部世界之间的接口,它使用RequestParser 来解析请求。因此,为了让 AppSpec 中的规范通过,必须先运行 RequestParserSpec 以检查请求解析是否正常。

这是问题所在:$ phpspec runAppSpec 之前运行,然后是 RequestParserSpec

是否可以颠倒该顺序?目前,如果RequestParser 有问题,AppSpec 将失败,而不知道根本问题是什么。

是的,我知道我可以做phpspec run tests/spec/RequestParserSpec.php,然后是其他人,但如果这可以自动化地一次性运行测试会更实用。

suites:
    myapp_suite:
        namespace: MyApp
        psr4_prefix: MyApp
        spec_path: tests

【问题讨论】:

  • 你能用这两个类和两个规范的代码更新问题吗?
  • 以下是规格:pastebin.com/5jQk5Rmspastebin.com/7nTJ3VbE。您为什么对来源感兴趣?
  • 抱歉,我看到 Pastebin 破坏了我在 AppSpec 上的缩进,有些行移位了...
  • 尝试帮助您了解如何规范它们。要求一个规范在另一个规范之前运行意味着您可能没有模拟/存根RequestParser
  • 哦,是的,完全正确。这是我第一次编写测试,所以我不习惯不同的现有技术和实践。 RequestParserEventEmitter(模拟无法处理此问题),并且代码的构建方式无法让我轻松模拟模拟(例如,通过在 RequestParser 上直接调用 emit()。)。你觉得这段代码怎么样? pastebin.com/iZcDMkd6

标签: php phpspec


【解决方案1】:

你可以替换

$parser = new RequestParser(clone $this->baseRequest);

用这个:

$parser = $this->requestParserFactory->createFromBaseRequest(clone $this->baseRequest);

然后注入一个RequestParserFactory,然后你就可以在规范中模拟它了。

【讨论】:

    猜你喜欢
    • 2014-07-26
    • 2020-06-13
    • 2018-02-27
    • 1970-01-01
    • 2013-02-15
    • 2012-08-17
    • 1970-01-01
    • 1970-01-01
    • 2017-03-05
    相关资源
    最近更新 更多