我在Visual Studio 2017中有一个Node.js项目,并尝试使用Mocha进行单元测试。但不知何故,如果需要任何不在node_modules中的文件,测试资源管理器(Test Explorer)就找不到单元测试。
我有一个简单的测试索引index.spec.js,测试资源管理器(Test Explorer)能够找到这些单元测试:
var assert = require('assert');
describe('Index Suite 1', function () {
it('Test 1', function () {
assert.ok(true, "This shouldn't fail");
});
it('Test 2', function () {
assert.ok(1 === 1, "This shouldn't fail");
assert.ok(false, "This should fail");
});
});
我有一个完全相同的测试文件heroes.spec.js,只添加了“var heroes = require('./heroes');”,但它无法找到单元测试。我认为它找不到heroes。文件heroes.js与heroes.spec.js在同一个文件夹中。我也尝试了./heroes.js。在两个文件中,TestFramework都设置为Mocha。
以下是heroes.spec.js文件内容:
var assert = require('assert');
var heroes = require('./heroes');
describe('Heroes Test', function () {
it('Test 1', function () {
assert.ok(true, "This shouldn't fail");
});
it('Test 4', function () {
assert.ok(1 === 1, "This shouldn't fail");
assert.ok(false, "This should fail");
});
});
我缩小了问题的范围。heroes.js引用其他模块,其中一个模块引用db.js,db.js使用config来设置dbConfig。如果我替换代码并硬编码值,单元测试就会被找到。我有一个解决方法,但我想正确地解决它。我尝试在项目属性中设置环境变量NODE_ENV=test,并创建一个test.config文件。问题仍然存在。有任何正确解决这个问题的想法吗?
以下是我的解决方法:
//var dbConfig = config.get('dbConfig');
var dbConfig = {
"user": "test",
"password": "password",
"server": "xxxx",
"database": "Sandbox"
};
谢谢