Mocha 跳过了一些测试

Mocha skips a number of tests

我有以下测试(由于公司政策,其值已更改),但出于某种原因,Mocha 不会 运行 它。更奇怪的是,如果我将 test 更改为 test.only,Mocha 会执行 运行,但是 - 正如人们所期望的 - none 我的其他测试。我添加了一些 console.logs 来描述什么会得到 运行 而什么不会。有人见过这样的东西吗?

代码:

/*global suite, setup, teardown, test, require, console */
var expect = require('expect.js'),
    sinon = require('sinon'),
    proxyquire = require('proxyquire');

suite('seven', function () {
    'use strict';

    var one = {
        a: sinon.stub()
    };

    var two = {
        b: sinon.stub()
    };

    var three = {
        c: sinon.stub()
    };

    var four = proxyquire(
        './four.js',
        {
            'one.js': one,
            'two.js': two
        }
    );

    var five = proxyquire(
        './five.js',
        {
            './four.js': four
        }
    );

    var six = proxyquire(
        './six.js',
        {
            './five': five
        }
    );

    var seven;

    setup(function () {
        console.log('does not print');

        seven = proxyquire(
            './seven.js',
            {
                './three.js': three,
                './six.js': six
            }
        );
    });

    suite('d', function () {
        console.log('does print');

        test('d things', function () {
            console.log('also does not print');

            var expectedDValue = 'd value';

            one.a.callsArgWith(1, {
                'dKey': expectedDValue
            });

            two.b.callsArgWith(1, true);

            three.c.returns({
                'cKeyOne': 'cValueOne',
                'cKeyTwo': {
                    'subCKey': 'subCValue'
                }
            });

            return seven.d().then(function (dValue) {
                expect(dValue).to.be(expectedDValue);
            });
        });
    });
});

Mocha 正在通过 make 运行 使用这些相关行:

TEST_TIMEOUT    := 5000
MOCHA_REPORTER  := dot
MOCHA_UI        := tdd
SERVER_PATH     := js
MODULE_PATH     := $(realpath ./)/node_modules/.bin

MOCHA_COMMAND := $(MODULE_PATH)/mocha
SERVER_TEST_FILES := $(shell find $(SERVER_PATH) -name "*.test.js")
MOCHA_SETUP_FILE := $(shell find $(SERVER_PATH) -name "mochaSetup.js")

test:
    -@$(MOCHA_COMMAND) -u $(MOCHA_UI) -t $(TEST_TIMEOUT) -R $(MOCHA_REPORTER) $(MOCHA_SETUP_FILE) $(SERVER_TEST_FILES)

更新

我发现在约 1600 个测试中,只有约 900 个正在 运行。我的是新的纯属巧合。正在读取测试文件 - 如果我在 suite 函数中 console.log 我看到它们被打印 - 但是 setuptest 函数都没有被执行。我确认它们也没有在同事的机器上执行,而是在我们的 CI 环境中执行。

更新 2

看来问题可能仅限于 Linux (WSL) 的 Windows 子系统 - 另一个同事 运行 在 Windows 7 上安装了一个 VM 看到了所有测试 运行.

它变成了另一个测试中引发的低级别异常导致 Mocha 完全停止 运行ning 测试。具体来说,我的一项测试是尝试执行 WSL 的文件系统不支持的文件操作,但没有给我任何关于正在发生的事情的指示,Mocha 只是退出了。

这不是一个很好的过程,但我对其他遇到此问题的人的建议是在 Mocha 退出之前找到最后一个测试 运行 并手动检查低级错误。