【问题标题】:Mocha skips a number of tests摩卡跳过了一些测试
【发布时间】:2018-11-06 20:31:33
【问题描述】:

我有以下测试(其值已因公司政策而更改),但无论出于何种原因,Mocha 都不会运行它。更奇怪的是,如果我将 test 更改为 test.only,Mocha 确实会运行它,但是 - 正如人们所期望的那样 - 我的其他测试都没有。我添加了一些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 的 Windows 子系统 (WSL) - 另一位在 Windows 7 上运行 VM 的同事看到所有测试都在运行。

【问题讨论】:

  • 您发布的代码实际上运行了测试,所以我想问题出在您尚未发布的某些代码中。
  • 另外,可能相关。你用的是哪个版本的摩卡?
  • 那么问题出在运行代码上吗?我不确定要发布哪些其他代码,因为这是文件的全部内容,没有正确的名称和值。 Mocha 版本是 1.21.4,我知道它确实很旧,但未经公司批准,我不允许升级任何东西。
  • 老实说我不确定。我将您的代码复制到一个文件中,安装了您的所有依赖项(包括 mocha@1.21.4),为您代理的模块制作了空白 JS 文件,它运行得很好。 :\ 也许分享你用来运行 mocha 的命令?
  • 使用运行测试的 Makefile sn-p 编辑了我的问题。

标签: javascript unit-testing mocha.js


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-19
    • 1970-01-01
    • 2019-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多