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

时间:2018-07-28 10:23:13

标签: testing meteor 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.

实际上,它被重复了三遍。不漂亮。而且我不希望通过测试会导致我的应用崩溃。

在浏览器中我也得到了

enter image description here

根据Meteor testing guide,我期望得到更像是不错的输出:

enter image description here

2 个答案:

答案 0 :(得分:2)

与大多数Node.js一样,几乎所有东西都有很多分支。 meteortesting:mocha也是如此。

cultofcoders:mocha似乎是practicalmeteor:mocha中的a few commits ahead,在某一点上,这是推荐的Meteor测试框架。

如果您运行

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

您会得到很好的输出。

出于好奇,我发现我得到的cultofcoders:mochameteor list | grep mocha)的版本是2.4.6,这个版本是github存储库所没有的...

答案 1 :(得分:1)

您所引用的屏幕截图是使用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在退出(正常退出或崩溃)(包括测试运行程序)时会重新启动您的应用程序。

如果要在一个CI中使用它,或者只想运行一次测试,请在流星命令中添加--once,否则请设置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当前不支持在浏览器中显示服务器和客户端测试的结果。

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


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

由于每行都添加了时间戳,因此测试似乎非常赌博。为避免这种情况,请在您的命令中添加--raw-logs


我希望这能回答您的大部分问题。我知道该文档需要一些改进,如果有人愿意花些时间对“只想开始使用”的人们按照更合理的顺序进行整理,我们将表示欢迎。