【问题标题】:Mocha unit tests are NOT found in NTVS在 NTVS 中找不到 Mocha 单元测试
【发布时间】:2016-01-10 21:53:36
【问题描述】:

我正在尝试让用 TypeScript 编写的 Mocha 单元测试在 Node Tools for Visual Studio 中的 Visual Studio 2015 社区版中工作。我收到此错误(在“输出”窗口中,Tests 部分):

------ 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) ==========

所以它列出了 .js 文件而不是 ts,这些文件已经被转译出来,但是在这些函数中生成的代码中绝对没有 replace 函数。所以这是一个非常奇怪的错误。我正在使用 Typescript 1.7。

从命令提示符 (npm test ...) 运行时,测试正在运行。但我希望能够设置(注意我正在测试 NodeJS 代码,例如服务器端 CommonJS)。

注意:在分析过程中,我已经将一个测试文件简化为默认的打字稿示例文件,但它会引发相同的错误,所以这不应该是问题:

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");
});
});

【问题讨论】:

    标签: visual-studio-2015 mocha.js typescript1.7 ntvs


    【解决方案1】:

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

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

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

    可以通过将此类代码移动到函数中来解决此问题。在这种情况下进入 (Mocha) before 函数。实际上我后来又遇到了完全相同的问题,这次来自不同的代码。下面是移动一些代码来解决此问题的示例。希望 NTVS 能够再次正确检测到您的单元测试。

    之前(错误)

    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");
    }
    

    注意:我在这里使用 ES6 lambda's - () =&gt; { ... } - 而不是常规的 ES5 函数 - function() { ... } - ,但这对于错误并不重要。

    【讨论】:

      猜你喜欢
      • 2015-12-16
      • 1970-01-01
      • 2013-04-25
      • 1970-01-01
      • 2018-05-01
      • 1970-01-01
      • 2017-10-04
      • 1970-01-01
      • 2016-05-09
      相关资源
      最近更新 更多