2016-05-12 115 views
0

我正尝试使用单元测试为Typescript源文件创作一个Typescript文件。我的项目结构:使用Chutzpah对Typescript源文件运行Typescript QUnit测试

/js/my-unit.ts 
/js-tests/my-unit.tests.ts 
/Scripts/typings/qunit/qunit.d.ts 
/chutzpah.json 

这里的my-unit.ts内容:

function globalFunc() { return { dummy: "object" }; } 

这里的my-unit.tests.ts内容:

/// <reference path="../scripts/typings/qunit/qunit.d.ts" /> 
/// <reference path="../js/my-unit.ts" /> 
QUnit.test("Test 1", assert => assert.ok(!!globalFunc())); 

这里的chutzpah.json文件:

{ 
    "Compile": { 
     "Mode": "External", 
     "Extensions": [ ".ts" ], 
     "ExtensionsWithNoOutput": [ ".d.ts" ] 
    }, 
    "Tests": [ 
     { "Includes": [ "**/*-tests/**.ts" ] } 
    ] 
} 

测试是红色的,这是因为:

找不到变量:globalFunc

为什么!? 我该如何解决这个问题?


有什么我想:

  • 引用.js文件在我的测试文件,但不允许
  • 寻找受骗者,发现主要this question,但一个答案没” (由Chutzpah的作者不少)似乎与我自己的设置相似
  • 重读the "Running Unit Tests with Typescript" documenation
  • 改变reference到源路径(有和没有结束斜线),但给我的错误在Visual Studio
  • 在单位文件和assert.ok(!!new Foo())测试加入class Foo {},但这也未能
  • 在加入module My { export class Foo { } }单元文件和assert.ok(!!new My.Foo())测试,但这也失败了
  • 使用其他Chutzpah扩展中的“在浏览器中打开”功能,并检查测试文件的源代码(这大概也是从测试资源管理器运行时为测试生成的),在那里我看到的确是我的源文件(my-unit.tsmy-unit.js)是而不是参考:

    <!DOCTYPE html> 
        <html> 
        <head> 
         <meta charset="utf-8" /> 
         <title>QUnit Tests</title> 
         <link rel="stylesheet" type="text/css" href="file:///E:/path/to/TestFiles/QUnit/qunit.css"/> 
         <script type="text/javascript" src="file:///E:/path/to/TestFiles/QUnit/qunit.js"></script> 
         <script type="text/javascript" src="file:///E:/path/to/project/js-tests/my-unit.tests.js"></script> 
         <script> 
          var amdTestPaths = []; 
          // code ommitted for brevity... 
         </script> 
        </head> 
        <body>  
         <div id="qunit"></div> 
         <div id="qunit-fixture"></div> 
        </body> 
        </html> 
    
  • 添加

    "References": [{ "Path": "js", "Includes": [ "**.ts" ], "Excludes": [ "**.d.ts" ] } 
    

    chutzpah.json文件。这种-的作品,但它是一个相当暴力破解,因为现在所有的源文件都应该包含每个测试夹具...


上面是(希望)我的实际场景的最小再现。我怎样才能使它工作?

回答

0

TL; DR版

后一些更多的搜索,我发现设置ExpandReferenceCommentstrue修复的东西:

"Tests": [ 
    { 
     "ExpandReferenceComments": true, 
     "Includes": [ "**/js-tests/**.ts" ] 
    } 
] 

据介绍here并确保///意见被扩展到<script>标签Chutzpah生成的测试文件。


完整的解决方案

这里有一个最小的摄制中所有文件的工作原理:

/chutzpah.json

{ 
    "Compile": { 
     "Mode": "External", 
     "Extensions": [ ".ts" ], 
     "ExtensionsWithNoOutput": [ ".d.ts" ] 
    }, 
    "Tests": [ 
     { 
      "ExpandReferenceComments": true, 
      "Includes": [ "**/js-tests/**.ts" ] 
     } 
    ] 
} 

/js/my-unit1.ts

function globalFunc1() { return { dummy: "object 1" }; } 

/js/my-unit2.ts

function globalFunc2() { return { dummy: "object 2" }; } 

/js-tests/my-unit1.tests.ts

/// <reference path="../scripts/typings/qunit/qunit.d.ts" /> 
/// <reference path="../js/my-unit1.ts" /> 
QUnit.test("globalFunc1 works", assert => assert.ok(!!globalFunc1())); 

/JS-测试/我的 - unit2.tests.ts

/// <reference path="../scripts/typings/qunit/qunit.d.ts" /> 
/// <reference path="../js/my-unit2.ts" /> 
QUnit.test("globalFunc2 works", assert => assert.ok(!!globalFunc2())); 

脚注

我不确定为什么ExpandReferenceComments默认为false,或者甚至是有益的(也许当CompleMode不是External?)。

的“完整解决方案”上面包括单位和2个测试文件,因为我想验证引用被扩展了每个测试文件它一定(如果你在浏览器中运行它们你将会看到Chutpah只为该灯具生成<script>标签)。

+1

'ExpandReferenceComments'默认为false,因为建议您在chutzpah.json的'References'部分显式设置所有引用。这是更高效和更清晰。但是,如果您希望展开行为与您的设置一样。 –

+0

@MthethewManela感谢您的授权评论:)。我一直认为'References'部分是“所有灯具都需要这个”的东西,例如我用它来包含jQuery和Angular。 (担心如果我将路径放到我的应用程序文件中,那么每个夹具都会包含所有应用程序文件。)无论如何,明天我会尝试将您的评论对首选方法的建议转化为我的答案供其他人使用。 – Jeroen

+1

引用中的所有内容都将添加到您的测试工具中。通常这对很多人来说都可以。但是,如果您需要不同测试的不同组参考,那么您实际上可以创建可以相互继承的chutzpah.json文件的层次结构。这是**高级**,但效果很好。 –

相关问题