0

我一直在尝试使用Tape assertions 和Nightmare.js来测试我的 ES6 代码来加载测试页面。我一直在尝试不同的 ES6 方法:async/await、yield、generators,我觉得我有点过头了。我也不确定何时何地不使用babel-tape。我可以通过以下测试,但是在我创建另一个评估块的那一刻,它就会出错。文档相当稀缺(或使用 Mocha)。这里的最佳做法是什么?

import {test} from "tape";
import {default as nightmare} from "nightmare";

const page = nightmare().goto("http://localhost:4000/index.html");

page.evaluate(() => document.getElementsByTagName("body").length).end()
  .then((result) => {
    test("detect page body", (assert) => {
      assert.equal(1, result);
      assert.end();
    });
  });

附言。我正在使用babel-tape-runner来运行测试。

4

1 回答 1

1

我可以通过以下测试,但是在我创建另一个评估块的那一刻,它就会出错。

嗯,你正在调用.end()Nightmare 实例。一旦它结束,您不应该与该实例进行交互,这可能会给您带来一些问题。

文档相当稀缺(或使用 Mocha)

如果你看一下 Nightmare 中的测试套件,这些describe块有一个beforeEachafterEach,分别设置或销毁 Nightmare 实例。您的测试 - 至少在我的阅读中 - 将为您的所有测试设置一个 Nightmare 实例,这可能会导致不良行为。


综上所述,您可能想尝试将 Nightmare 的声明和使用转移到您的测试内部。即插即用,例如:

import {test} from "tape";
import {default as Nightmare} from "nightmare";

test('detect page body', (assert) => {
 var nightmare = Nightmare();
 nightmare
    .goto("http://localhost:4000/index.html")
    .evaluate(() => document.getElementsByTagName("body").length)
    .then((result) => {
      assert.equal(1, result);
      nightmare.end(()=>{
        assert.end();
      });
    });
});
于 2016-02-29T17:31:56.510 回答