我是TypeScript的新手,并尝试为我的TypeScript代码库设置一些单元测试。问题是我的代码依赖于其他人的工作,所有这些引用都是以硬编码的相对路径的形式完成的,比如“...... \ somefile.d.ts”。当进行单元测试时,我想伪造一些依赖,但不知道如何使TypeScript采用我的Fakes而不是硬编码的引用文件。
我的问题是:有没有办法不在源代码中硬编码参考路径?在TypeScript中是否存在预处理器或宏,或者我可以使用项目系统来帮助解决依赖关系,而不是在源代码中对它们进行硬编码?
答案 0 :(得分:4)
查看grunt-ts参考文件生成:https://github.com/basarat/grunt-ts#reference-file-generation
你可以做的是有单独的目标,一个用于开发,一个用于测试:
dev: {
src: ["app/**/*.ts", "!app/**/*.spec.ts"], // Exclude your spec files
reference: "./app/reference.ts",
out: 'app/out.js',
},
test: {
src: ["app/**/*.ts"], // Include all files
reference: "./app/reference.ts",
out: 'app/out.js',
},
现在您只从所有文件中引用app/reference.ts
。当你想要为dev发布/ dev build时,你想运行测试,构建测试。
答案 1 :(得分:3)
您是否考虑使用测试或间谍框架来替换测试实现的实现,而不是加载不同的文件?
在我们的TypeScript项目中,我们使用jasmine spies(https://github.com/pivotal/jasmine/wiki/Spies,http://tobyho.com/2011/12/15/jasmine-spy-cheatsheet/)来伪造依赖关系。我们正常加载主要源代码,然后使用createSpyObj和spyOn函数用我们测试文件中定义的新TypeScript替换依赖项。
使用这种方法,您无需对主要源代码进行任何修改或包含路径 - 所有操作都在测试文件中完成。