nee*_*ame 7 javascript jasmine typescript karma-jasmine
我正在使用一个测试项目,我正在编写一个纯Javascript Jasmine Karma设置来测试预编译的Typescript设置.但是,我无法启动测试用例.
我可以在控制台中看到来自编译的打字稿的控制台消息,但它根本不会启动测试脚本.
请注意,这来自AngularApp,但这整个部分来自一个没有Angular2的部分.
没有错误消息,除此之外显示0/0测试已运行,并且"component/to/test"没有时间戳.
在test.spec.js文件中,我有
define("testName", ["component/to/test"], function(component){
describe("testing module", function(){
it("should work", function(){expect(true).toEqual(true)});
})
}
Run Code Online (Sandbox Code Playgroud)
在已编译的打字稿文件中,myTs.js
var requirejs, require, define;
(function (global) {
define("component/to/test" ["depend", "ences"]), function(depend,ences)
{ more code here })
some compiled typescript here
});
require.config({
path: {path to javascript libs},
shim: { ... }
})
Run Code Online (Sandbox Code Playgroud)
在我的业力档案中
basePath: '',
frameworks: ['jasmine', 'requirejs'],
files: [
'lib1',
'lib2',
'spec/test-main.js',
{pattern: 'js/*.js', included: true, served: true},
{pattern: 'spec/*.spec.js', included: false, served: true}
],
exclude: [],
reporters: ['progress'],
autoWatch: true,
browsers: ['Chrome']
Run Code Online (Sandbox Code Playgroud)
在我的test-main.js中,在我询问是否要使用requirejs之后,我从karma init获得了它.
var allTestFiles = []
var TEST_REGEXP = /(spec|test)\.js$/i
Object.keys(window.__karma__.files).forEach(function (file) {
if (TEST_REGEXP.test(file)) {
var normalizedTestModule = file.replace(/^\/base\/|\.js$/g, '')
allTestFiles.push(normalizedTestModule)
}
})
require.config({
baseUrl: 'base',
deps: allTestFiles,
callback: window.__karma__.start
})
Run Code Online (Sandbox Code Playgroud)
为空间删除了注释和一些不相关的代码.
你想做的事是可以做到的。我已经做过很多很多次了,没有任何问题。
enforceDefine您应该始终在打开配置选项的情况下运行 RequireJS :
require.config({
enforceDefine: true,
// Anything else you need.
});
Run Code Online (Sandbox Code Playgroud)
因为它揭示了可能被忽视的问题。您不希望启用此功能的唯一情况是,如果您能说出enforceDefine对您的具体情况不利的重要原因。
您显示的代码中的一个主要问题是您在define调用中对模块名称进行了硬编码。就像define("testName", ...你不应该这样做。从调用中删除模块名称define。当您要求优化器创建模块包时,优化器会添加硬编码的模块名称。在某些情况下,您可能想要对名称进行硬编码,但这种情况很少见,除非您能说出需要硬编码名称的充分且充分的理由,否则不要这样做。
对于测试文件来说,硬编码名称尤其有问题。test-main.js指示 RequireJS 加载您的测试文件。它实际上需要一个名为 之类的模块spec/test.spec。当 RequireJS 实际加载与该模块对应的 JavaScript 文件时,它找到的是名为testName. 因此它找不到该模块,并且由于false 而spec/test.spec默默失败。enforceDefine
鉴于您显示的配置,component/to/test您给出的硬编码名称可能可以正常工作。我仍然不建议在那里使用硬编码名称。你说:definemyTs.js
“组件/要/测试”没有时间戳
如果您指的是 Karma 时间戳,则不可能有任何时间戳,因为您没有具有该名称的文件。
| 归档时间: |
|
| 查看次数: |
343 次 |
| 最近记录: |