thoni56
thoni56

Reputation: 3335

Garbled test result output from meteortesting:mocha

The recommended testing framework for Meteor 1.7 seems to be meteortesting:mocha.

With Meteor 1.7.0.3 I created a default app (meteor create my-app), which has the following tests (in 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);
    });
  }
});

I ran

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

and with meteortesting:mocha@2.4.5_6 I got this in the console:

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.

Actually, it was repeated three times. Not pretty. And I wasn't expecting a passing test to crash my app.

Also in the browser I got this

enter image description here

I was expecting something more like the nice output, as per the Meteor testing guide:

enter image description here

Upvotes: 3

Views: 501

Answers (2)

SimonSimCity
SimonSimCity

Reputation: 6572

The screenshot, you reference to, is made using practicalmeteor:mocha, but meteortesting:mocha is not (as the other answer claims) a fork of it but a separately developed package, aiming for the same goal, which is running of tests in Meteor.

The usage of the packages is very different and practicalmeteor:mocha might look a bit trickier to set up and this list only applies to it's version 1.0.1 and might change later.

But I have to admit that the documentation needs a refresh ... Anyways, here are some helpful tipps which I'll include in the documentation soon.

If you just want to get started, run this:

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

Do you want to exit after the tests are completed or re-run them after file-change?

Usually, Meteor will restart your application when it exits (a normal exit or a crash), which includes the test-runner.

In case you want to use it in one of your CI or you just want to run the tests once, add --once to the meteor-command, otherwise set TEST_WATCH=1 before running this script. If you don't set the env variable, and don't define --once, Meteor will print these lines and restart the tests once they're finished:

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

As of now I haven't found a way to check if the flag --once is set, which would omit the env variable. The flexibility here to choose between CI and continuous testing is very useful.

Maybe you're currently working on a feature and want to run the tests as you work. If you have set TEST_WATCH=1 and are not using --once, Meteor will restart the tests once it registers that a file was changed. You can even limit the test collection using MOCHA_GREP.


Where and how do you want to see the results?

You currently have to choose between seeing all the test-results on the command-line or to show the server-tests in the commandline and the client-tests in the browser. Currently practicalmeteor:mocha does not support showing the result of the server- and client-tests in the browser, as your screenshot shows.

Please take a look at the package documentation for further details:


You should disable the Meteor timestamp to make it look better.

Tests might look quite gambled because of the timestamp added to every line. To avoid this, add --raw-logs to your command.


I hope this answers most of your question. I know that the documentation needs some improvements and would welcome if someone would take the time to take it into a more logical order for people who "just want to get started".

Upvotes: 1

thoni56
thoni56

Reputation: 3335

As with most things Node.js, there are a multitude of forks of almost anything. So also with meteortesting:mocha.

cultofcoders:mocha seems to be a few commits ahead of practicalmeteor:mocha, which was at one point the recommended testing framework for Meteor.

If you run

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

you'll get the nice output.

As a curiousity, I found that the version of cultofcoders:mocha I got (meteor list | grep mocha) was 2.4.6, a version that the github repo does not have...

Upvotes: 2

Related Questions