Mocha 跳过了一些测试
Mocha skips a number of tests
我有以下测试(由于公司政策,其值已更改),但出于某种原因,Mocha 不会 运行 它。更奇怪的是,如果我将 test
更改为 test.only
,Mocha 会执行 运行,但是 - 正如人们所期望的 - none 我的其他测试。我添加了一些 console.log
s 来描述什么会得到 运行 而什么不会。有人见过这样的东西吗?
代码:
/*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
我看到它们被打印 - 但是 setup
和 test
函数都没有被执行。我确认它们也没有在同事的机器上执行,而是在我们的 CI 环境中执行。
更新 2
看来问题可能仅限于 Linux (WSL) 的 Windows 子系统 - 另一个同事 运行 在 Windows 7 上安装了一个 VM 看到了所有测试 运行.
它变成了另一个测试中引发的低级别异常导致 Mocha 完全停止 运行ning 测试。具体来说,我的一项测试是尝试执行 WSL 的文件系统不支持的文件操作,但没有给我任何关于正在发生的事情的指示,Mocha 只是退出了。
这不是一个很好的过程,但我对其他遇到此问题的人的建议是在 Mocha 退出之前找到最后一个测试 运行 并手动检查低级错误。
我有以下测试(由于公司政策,其值已更改),但出于某种原因,Mocha 不会 运行 它。更奇怪的是,如果我将 test
更改为 test.only
,Mocha 会执行 运行,但是 - 正如人们所期望的 - none 我的其他测试。我添加了一些 console.log
s 来描述什么会得到 运行 而什么不会。有人见过这样的东西吗?
代码:
/*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
我看到它们被打印 - 但是 setup
和 test
函数都没有被执行。我确认它们也没有在同事的机器上执行,而是在我们的 CI 环境中执行。
更新 2
看来问题可能仅限于 Linux (WSL) 的 Windows 子系统 - 另一个同事 运行 在 Windows 7 上安装了一个 VM 看到了所有测试 运行.
它变成了另一个测试中引发的低级别异常导致 Mocha 完全停止 运行ning 测试。具体来说,我的一项测试是尝试执行 WSL 的文件系统不支持的文件操作,但没有给我任何关于正在发生的事情的指示,Mocha 只是退出了。
这不是一个很好的过程,但我对其他遇到此问题的人的建议是在 Mocha 退出之前找到最后一个测试 运行 并手动检查低级错误。