ES6 javascript 使用 Tape 和 Nightmare.js 进行测试

ES6 javascript tests using Tape and Nightmare.js

我一直在尝试使用 Tape assertions and Nightmare.js to load a test page. I keep trying different ES6 methods: async/await, yield, generators, and I think I'm a bit over my head. I'm also not sure when and when to not use babel-tape 测试我的 ES6 代码。我可以让下面的测试通过,但是当我创建另一个评估块时它出错了。文档相当稀缺(或使用 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();
    });
  });

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

I can get the following test to pass, but the minute I create another evaluate block it errors out.

嗯,你在 Nightmare 实例上调用 .end()。你不应该在它结束后与那个实例交互,这可能会给你带来一些问题。

The documentation is fairly scarce (or uses 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();
      });
    });
});