如何使用黄瓜在场景之间共享状态

Fre*_*III 5 ruby tdd bdd cucumber

我有一个功能"从外部网站导入文章".在我的第一个场景中,我测试从外部网站导入链接列表.

Feature: Importing articles from external website
  Scenario: Searching articles on example.com and return the links
    Given there is an Importer
    And its URL is "http://example.com"
    When we search for "demo"
    Then the Importer should return 25 links
    And one of the links should be "http://example.com/demo.html"
Run Code Online (Sandbox Code Playgroud)

在我的步骤中,我有一个@result数组中的25个链接.

在我的第二个场景中,我想采取其中一个链接并测试我正确解析文章的事实.

现在显然我不想每次都去外部网站,特别是现在第一个场景通过了.

我如何继续这里,以便我可以继续测试而不需要为第一个场景发出HTTP请求?或者我应该运行一次并@result在其他场景中保持阵列,以便我可以继续使用实际的结果集?

Jon*_*n M 9

这是故意很难做到的!测试之间共享状态通常是非常糟糕的事情,尤其是因为它会强制您的测试按顺序运行(您的第一个场景必须在后续场景之前运行,而不是Cucumber明确支持的内容).

我的建议是重新考虑你的测试策略.在测试中使用外部服务是使它们运行缓慢且不可靠的好方法(当外部服务出现故障时会发生什么?).在这种情况下,我建议使用像webmockvcr这样的东西来创建外部网站的虚假版本,它会返回与您期望的真实网站相同的响应,但是您可以在没有担心性能或不可用性.