gpt4 book ai didi

javascript - Jasmine 测试用例未在已编译的 Typescript 中定义内启动

转载 作者:数据小太阳 更新时间:2023-10-29 04:48:58 26 4
gpt4 key购买 nike

我正在处理一个测试项目,我正在编写一个纯 Javascript Jasmine Karma 设置来测试预编译的 Typescript 设置。但是,我无法启动测试用例。

我可以在控制台中看到来自已编译 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)});
})
}

在编译好的typescript文件中,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: { ... }
})

在我的 karma 文件中

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']

在我的 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
})

评论和一些不相关的代码被删除了空间。

最佳答案

你想做的事是可以做的。我已经做过很多次了,没有遇到任何麻烦。

您应该始终在打开配置选项 enforceDefine 的情况下运行 RequireJS:

require.config({
enforceDefine: true,
// Anything else you need.
});

因为它揭示了可能被忽视的问题。您唯一不想打开此功能的情况是,如果您能说出 enforceDefine 对您的特定情况不利的重要原因。

您显示的代码中的一个主要问题是您在 define 调用中对模块名称进行了硬编码。像 define("testName", ... 你不应该这样做。从你的 define 调用中删除模块名称。当你询问时,优化器会添加硬编码模块名称它用于创建模块包。在某些情况下,您可能希望对名称进行硬编码,但这种情况很少见,除非您能说出需要硬编码名称的充分充分理由,否则不要这样做。

对于您的测试文件,硬编码名称尤其有问题。 test-main.js 指示 RequireJS 加载您的测试文件。它实际上需要一个名为 spec/test.spec 的模块。当 RequireJS 实际加载与此模块对应的 JavaScript 文件时,它找到的是名为 testName 的模块的定义。所以它没有找到模块 spec/test.spec 并且它失败了,因为 enforceDefine 是 false。

您在 myTs.js 中为 define 指定的硬编码 component/to/test 名称可能在您显示的配置下工作正常。我仍然不建议在那里使用硬编码名称。你说:

there was no timestamp for "component/to/test"

如果您指的是 Karma 时间戳,则不可能有任何时间戳,因为您没有具有该名称的文件。

关于javascript - Jasmine 测试用例未在已编译的 Typescript 中定义内启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46437614/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com