gpt4 book ai didi

javascript - 如何在 Karma 中配置 System.js 以测试依赖于 moment.js 的代码

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:41:44 25 4
gpt4 key购买 nike

如果我的应用代码使用依赖于 moment.js 库的 ng2-boostrap 模块,我将无法在 Karma 中运行 jasmine 测试。

该应用程序在浏览器中运行良好, Jasmine 测试可以通过将时刻映射添加到系统来在浏览器中运行:

-- unit-test.html ---
...
<script src="node_modules/ng2-bootstrap/bundles/ng2-bootstrap.min.js"></script>
...
<body>
<script>
// #2. Configure SystemJS to use the .js extension
// for imports from the app folder
System.config({
packages: {
'app': {defaultExtension: 'js'}
},
map: {
'moment': 'node_modules/moment/moment.js'
}
});

我在 karma.shim 中尝试了同样的操作,但它不起作用。我得到:

 Error: XHR error (404 Not Found) loading http://localhost:9876/node_modules/moment/moment.js
Error loading http://localhost:9876/node_modules/moment/moment.js as "moment" from http://localhost:9876/ng2-bootstrap/components/datepicker/date-formatter
at addToError (D:/Projects/Angular/karma-ngbootstrap/node_modules/systemjs/dist/system.src.js:41:18)

在我的 karma.conf 中有

files: [
...
{pattern: 'node_modules/angular2/bundles/testing.dev.js', included: true, watched: true},
....
{pattern: 'node_modules/moment/moment.js',included: true, watched: true},
{pattern: 'node_modules/ng2-bootstrap/bundles/ng2-bootstrap.min.js', included: true, watched: true},

{pattern: 'karma-test-shim.js', included: true, watched: true},

{pattern: 'app/**/*.js', included: false, watched: true},
....

并且在 karma-test-shim 中:

System.config({
packages: {
'base/app': {
defaultExtension: false,
format: 'register',
map: Object.keys(window.__karma__.files).
filter(onlyAppFiles).
reduce(function createPathRecords(pathsMapping, appPath) {
// creates local module name mapping to global path with karma's fingerprint in path, e.g.:
// './hero.service': '/base/src/app/hero.service.js?f4523daf879cfb7310ef6242682ccf10b2041b3e'
var moduleName = appPath.replace(/^\/base\/app\//, './').replace(/\.js$/, '');
pathsMapping[moduleName] = appPath + '?' + window.__karma__.files[appPath]
return pathsMapping;
}, {})
}
},
map: {
'moment': 'node_modules/moment/moment.js'
}
});

映射部分可以正常工作,这取决于我在 moment 下放置的内容,我稍后会在 XHR 错误路径中获取它。

完整的文件可以在简单的测试项目中找到: https://github.com/tzielins/angular-start-project

karma 配置基于http://twofuckingdevelopers.com/2016/01/testing-angular-2-with-karma-and-jasmine/

我很高兴使用一个更简单的配置,但我很幸运有 System.js/Karma 的经验,可以从头开始,而且这个可以在没有 ng2-boostrap 依赖的情况下工作(被测代码只导入 ng2-boostrap 的形式,这足以trip karma,可以注释掉测试通过)。

我一定是遗漏了 System.js 配置中的一些明显内容。

最佳答案

我正在使用新的“ng2-bootstrap”-“ngx-bootstrap”与 angular-seed也遇到了同样的问题。

修复了这个问题 - 将以下代码添加到“karma.conf.js”的文件部分:

{pattern: 'node_modules/ngx-bootstrap/bundles/ngx-bootstrap.umd.min.js', included: false, watched: false}

关于javascript - 如何在 Karma 中配置 System.js 以测试依赖于 moment.js 的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36015647/

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