gpt4 book ai didi

javascript - 如何配置 karma 以便 typescript 源文件是可调试的

转载 作者:可可西里 更新时间:2023-11-01 02:57:06 25 4
gpt4 key购买 nike

我已经下载了一个种子项目 Angular2 Webpack Starter并顺利启动并运行。我使用它时遇到的一个不便是在单元测试下调试源文件。所有 *.spec.ts 文件都加载到浏览器中并可调试,因此至少为它们生成 map 文件。当我进入一个正在测试的源文件时,我得到如下信息:

Source file in browser

karma 配置:

module.exports = function(config) {
var testWebpackConfig = require('./webpack.test.js');

config.set({
basePath: '',
frameworks: ['jasmine'],
exclude: [ ],
files: [ { pattern: './config/spec-bundle.js', watched: false } ],
preprocessors: { './config/spec-bundle.js': ['coverage', 'webpack', 'sourcemap'] },
webpack: testWebpackConfig,
coverageReporter: {
dir : 'coverage/',
reporters: [
{ type: 'text-summary' },
{ type: 'json' },
{ type: 'html' }
]
},
webpackServer: { noInfo: true },
reporters: [ 'mocha', 'coverage' ],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: [
'Chrome'
],
singleRun: false
});
};

webpack.test.js:

const helpers = require('./helpers');
const ProvidePlugin = require('webpack/lib/ProvidePlugin');
const DefinePlugin = require('webpack/lib/DefinePlugin');
const ENV = process.env.ENV = process.env.NODE_ENV = 'test';
module.exports = {
devtool: 'inline-source-map',
resolve: {
extensions: ['', '.ts', '.js'],
root: helpers.root('src'),
},
module: {
preLoaders: [
{
test: /\.ts$/,
loader: 'tslint-loader',
exclude: [helpers.root('node_modules')]
},
{
test: /\.js$/,
loader: 'source-map-loader',
exclude: [
helpers.root('node_modules/rxjs'),
helpers.root('node_modules/@angular2-material'),
helpers.root('node_modules/@angular')
]}
],
loaders: [
{
test: /\.ts$/,
loader: 'awesome-typescript-loader',
query: {
compilerOptions: {
removeComments: true
}
},
exclude: [/\.e2e\.ts$/]
},
{ test: /\.json$/, loader: 'json-loader', exclude: [helpers.root('src/index.html')] },
{ test: /\.css$/, loaders: ['to-string-loader', 'css-loader'], exclude: [helpers.root('src/index.html')] },
{ test: /\.html$/, loader: 'raw-loader', exclude: [helpers.root('src/index.html')] }
],
postLoaders: [
{
test: /\.(js|ts)$/, loader: 'istanbul-instrumenter-loader',
include: helpers.root('src'),
exclude: [
/\.(e2e|spec)\.ts$/,
/node_modules/
]
}
]
},
plugins: [
new DefinePlugin({
'ENV': JSON.stringify(ENV),
'HMR': false,
'process.env': {
'ENV': JSON.stringify(ENV),
'NODE_ENV': JSON.stringify(ENV),
'HMR': false,
}
}),
],
tslint: {
emitErrors: false,
failOnHint: false,
resourcePath: 'src'
},
node: {
global: 'window',
process: false,
crypto: 'empty',
module: false,
clearImmediate: false,
setImmediate: false
}
};

spec-bundle.js:

Error.stackTraceLimit = Infinity;
require('core-js/es6');
require('core-js/es7/reflect');
require('ts-helpers');
require('zone.js/dist/zone');
require('zone.js/dist/long-stack-trace-zone');
require('zone.js/dist/jasmine-patch');
require('zone.js/dist/async-test');
require('zone.js/dist/fake-async-test');
require('zone.js/dist/sync-test');
require('rxjs/Rx');
var testing = require('@angular/core/testing');
var browser = require('@angular/platform-browser-dynamic/testing');
testing.setBaseTestProviders(
browser.TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
browser.TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS
);
var testContext = require.context('../src', true, /\.spec\.ts/);
function requireAll(requireContext) {
return requireContext.keys().map(requireContext);
}
var modules = requireAll(testContext);

此配置与启动包中的配置相同,如果有任何修改则稍作修改。你能告诉我如何修改此配置,以便 .ts 源文件可以使用覆盖率统计信息进行调试。

最佳答案

我的项目也有类似的问题(这不是 Angular2 Webpack Starter,但我相信有同样的原因。)

默认情况下,WebPack 不会将源映射传递给 Karma,除非文件扩展名为 .js(如果您使用的是 React,则为 .jsx)。在这样的设置中,Karma+WebPack 只是将 .ts 文件(或 .tsx)直接从 TypeScript 转换为 JavaScript,并以相同的文件名提供它们。

我找到了适合我的解决方案 on the GitHub Issues page for karma-webpack .诀窍是将带有扩展文件过滤器的 webpack.SourceMapDevToolPlugin 注入(inject)到 webpack 配置中。对您来说,应该看起来像这样:

var webpack = require('webpack');
// in your config.set:
plugins: [
// existing plugins go here
new webpack.SourceMapDevToolPlugin({
filename: null, // if no value is provided the sourcemap is inlined
test: /\.(ts|js)($|\?)/i // process .js and .ts files only
})
]

关于javascript - 如何配置 karma 以便 typescript 源文件是可调试的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38344126/

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