Visual studio 2015 在NTV中找不到Mocha单元测试

Visual studio 2015 在NTV中找不到Mocha单元测试,visual-studio-2015,mocha.js,typescript1.7,ntvs,Visual Studio 2015,Mocha.js,Typescript1.7,Ntvs,我正试图让用TypeScript编写的Mocha单元测试在Visual Studio的节点工具中的Visual Studio 2015社区版中运行。我得到了这个错误(在输出窗口中,Tests部分): 它最终设法解决了这个问题;我想分享一下: 在我的案例中,这个问题是由NTV有一些奇怪的范围要求引起的 测试文件中有一些Javascript代码没有嵌套在函数中。然后在NTVS上下文中执行它的代码,并在那里启动堆栈跟踪。因此,在错误消息中提到的replace,在我的测试代码中没有,而是在其他地方 这个

我正试图让用TypeScript编写的Mocha单元测试在Visual Studio的节点工具中的Visual Studio 2015社区版中运行。我得到了这个错误(在输出窗口中,
Tests
部分):


它最终设法解决了这个问题;我想分享一下:

在我的案例中,这个问题是由NTV有一些奇怪的范围要求引起的

测试文件中有一些Javascript代码没有嵌套在函数中。然后在NTVS上下文中执行它的代码,并在那里启动堆栈跟踪。因此,在错误消息中提到的
replace
,在我的测试代码中没有,而是在其他地方

这个问题可以通过将这样的代码移动到函数中来解决。在本例中,将其转换为()前的
函数。实际上,我后来又遇到了完全相同的问题,这次来自不同的代码。下面是移动一些代码来修复此问题的示例。希望NTV能再次正确地检测您的单元测试

前(错误)
导入。。。
var clearDb=require(“摩卡猫鼬”)(dbUri);{…}
-这里不是常规ES5函数-
function(){…}
-,但这对于错误并不重要

------ Discover test started ------
Processing:  <lot of *.js** files>...
Test discovery error: [TypeError: Cannot read property 'replace' of undefined] in C:\Code\ov\BuyCo\test\sellers\testPersistance.js
Test discovery error: [TypeError: Cannot read property 'replace' of undefined] in C:\Code\ov\BuyCo\test\sellers\testUserPersistance.js
...<andsoon>
Processing finished for framework of Mocha
Discovered 0 testcases.
========== Discover test finished: 0 found (0:00:01.4378126) ==========
import assert = require('assert');

describe("Test Suite 1", () => {
it("Test A", () => {
    assert.ok(true, "This shouldn't fail");
});

it("Test B", () => {
    assert.ok(1 === 1, "This shouldn't fail");
    assert.ok(false, "This should fail ts");
});
});
import ...

var clearDb = require("mocha-mongoose")(dbUri);     <--- NTVS don't like it

describe("Example unit test", () => {
    before(done => {
        var testSubject = { name: "John Doe" };
    }

    it("throws strange error");
}
import ...

describe("Example unit test", () => {
    before(done => {
        var clearDb = require("mocha-mongoose")(dbUri);  <--- Move to here
        var testSubject = { name: "John Doe" };
    }

    it("now works");
}