来自 meteortesting:mocha 的乱码测试结果输出

Garbled test result output from meteortesting:mocha

推荐的 Meteor 1.7 测试框架似乎是 meteortesting:mocha

我使用 Meteor 1.7.0.3 创建了一个默认应用程序 (meteor create my-app),它具有以下测试(在 test/main.js 中)

import assert from "assert";

describe("my-app", function () {
  it("package.json has correct name", async function () {
    const { name } = await import("../package.json");
    assert.strictEqual(name, "noteit");
  });

  if (Meteor.isClient) {
    it("client is not server", function () {
      assert.strictEqual(Meteor.isServer, false);
    });
  }

  if (Meteor.isServer) {
    it("server is not client", function () {
      assert.strictEqual(Meteor.isClient, false);
    });
  }
});

我运行

meteor add meteortesting:mocha
meteor test --driver-package meteortesting:mocha

meteortesting:mocha@2.4.5_6 我在控制台中得到了这个:

I20180728-12:06:37.729(2)? --------------------------------
I20180728-12:06:37.729(2)? ----- RUNNING SERVER TESTS -----
I20180728-12:06:37.729(2)? --------------------------------
I20180728-12:06:37.729(2)? 
I20180728-12:06:37.730(2)? 
I20180728-12:06:37.731(2)? 
I20180728-12:06:37.737(2)?   the server
    ✓ fails a test.753(2)? 
I20180728-12:06:37.755(2)? 
I20180728-12:06:37.756(2)? 
I20180728-12:06:37.756(2)?   1 passing (26ms)
I20180728-12:06:37.756(2)? 
I20180728-12:06:37.757(2)? Load the app in a browser to run client tests, or set the TEST_BROWSER_DRIVER environment variable. See https://github.com/meteortesting/meteor-mocha/blob/master/README.md#run-app-tests
=> Exited with code: 0
=> Your application is crashing. Waiting for file change.

其实重复了三遍。不漂亮。而且我没想到通过测试会使我的应用程序崩溃。

我也在浏览器中得到了这个

根据 Meteor testing guide:

,我期待更像好的输出

与大多数东西一样 Node.js,几乎任何东西都有大量的分支。 meteortesting:mocha.

也是如此

cultofcoders:mocha 似乎是 practicalmeteor:mochaa few commits ahead,这曾一度是 Meteor 推荐的测试框架。

如果你运行

meteor add cultofcoders:mocha
meteor test --driver-package cultofcoders:mocha

你会得到很好的输出。

出于好奇,我发现我得到的 cultofcoders:mocha 版本 (meteor list | grep mocha) 是 2.4.6,github 仓库没有的版本...

您引用的屏幕截图是使用 practicalmeteor:mocha 制作的,但 meteortesting:mocha 不是(正如其他答案所声称的那样)它的一个分支,而是一个单独开发的包,目的相同目标,即 运行 宁的 Meteor 测试。

包的用法非常不同,practicalmeteor:mocha 设置起来可能有点棘手,此列表仅适用于它的版本 1.0.1,以后可能会更改。

但我不得不承认文档需要更新...无论如何,这里有一些有用的提示,我很快就会将其包含在文档中。

如果你只是想开始,运行这个:

meteor add meteortesting:mocha
npm i --save-dev puppeteer@^1.5.0
TEST_BROWSER_DRIVER=puppeteer meteor test --driver-package meteortesting:mocha --raw-logs --once

你想在测试完成后退出还是在文件更改后重新运行它们?

通常,Meteor 会在您的应用程序退出时(正常退出或崩溃)重新启动您的应用程序,其中包括测试-运行ner.

如果您想在您的 CI 之一中使用它,或者您只想 运行 测试一次,请将 --once 添加到 meteor-command,否则设置 TEST_WATCH=1 在 运行 宁此脚本之前。如果你没有设置 env 变量,也没有定义 --once,Meteor 将打印这些行并在它们完成后重新启动测试:

=> Exited with code: 0
=> Your application is crashing. Waiting for file change.

到目前为止,我还没有找到一种方法来检查标志 --once 是否已设置,这将省略 env 变量。此处在 CI 和连续测试之间进行选择的灵活性非常有用。

也许您目前正在开发一项功能并希望在工作时运行 进行测试。如果你设置了 TEST_WATCH=1 并且没有使用 --once,Meteor 将在注册文件被更改后重新启动测试。您甚至可以使用 MOCHA_GREP.

限制测试集合

您想在哪里以及如何查看结果?

您目前必须选择是在命令行中查看所有测试结果,还是在命令行中显示服务器测试并在浏览器中显示客户端测试。目前 practicalmeteor:mocha 不支持在浏览器中显示服务器和客户端测试的结果,如您的屏幕截图所示。

请查看软件包文档以获取更多详细信息:


您应该禁用 Meteor 时间戳以使其看起来更好。

由于每一行都添加了时间戳,测试可能看起来很冒险。为避免这种情况,请将 --raw-logs 添加到您的命令中。


我希望这能回答您的大部分问题。我知道文档需要一些改进,如果有人愿意花时间为 "just want to get started".