附件

可以将文本,图像和其他数据添加到事件协议的输出和带有附件的JSON格式器中。World构造函数接受一个attach函数, 在缺省的World构造函数中它被传给this.attach. 如果使用自定义的World构造函数,则还需要执行此操作,以便添加附件。

  1. var {After} = require('cucumber');
  2. After(function () {
  3. this.attach('Some text');
  4. });

默认情况下,文本以MIME类型 text/plain来保存. 您也可以指定不同的MIME类型:

  1. var {After} = require('cucumber');
  2. After(function () {
  3. this.attach('{"name": "某些 JSON"}', 'application/json');
  4. });

图像和其他二进制数据可以使用stream.Readable附加。数据将被 base64编码到输出中。您应该等待流被读取后再继续写入,等待方式可通过提供回调函数或等到返回的Promise被完成。

  1. var {After, Status} = require('cucumber');
  2. // 传递一个回调函数
  3. After(function (testCase, callback) {
  4. if (testCase.result.status === Status.FAILED) {
  5. var stream = getScreenshotOfError();
  6. this.attach(stream, 'image/png', callback);
  7. }
  8. else {
  9. callback();
  10. }
  11. });
  12. // 返回Promise
  13. After(function (testCase) {
  14. if (testCase.result.status === Status.FAILED) {
  15. var stream = getScreenshotOfError();
  16. return this.attach(stream, 'image/png');
  17. }
  18. });

图像和二进制数据也可以使用Buffer附加上去.数据将被 base64 编码到输出中.

  1. var {After, Status} = require('cucumber');
  2. After(function (testCase) {
  3. if (testCase.result.status === Status.FAILED) {
  4. var buffer = getScreenshotOfError();
  5. this.attach(buffer, 'image/png');
  6. }
  7. });

以下是 在场景失败时使用Selenium WebDriver保存屏幕截图的示例:

  1. var {After} = require('cucumber');
  2. After(function (testCase) {
  3. var world = this;
  4. if (testCase.result.status === Status.FAILED) {
  5. return webDriver.takeScreenshot().then(function(screenShot) {
  6. // 截图是一个base-64编码PNG
  7. world.attach(screenShot, 'image/png');
  8. });
  9. }
  10. });

附件也由progress、progress-bar和summary格式化程序打印。它们在步骤之后出现,只有text/plain内容可见。它可以用于调试场景,特别是在并行模式下。

  1. // 步骤定义
  2. Given(/^a basic step$/, function() {
  3. this.attach('Some info.')
  4. this.attach('{"some", "JSON"}}', 'application/json')
  5. })
  6. // 结果格式
  7. // ✔ Given a basic step # path:line
  8. // Attachment (text/plain): Some info.
  9. // Attachment (application/json)