我正在使用node-openid-client通过OpenID提供程序执行基于OpenIDConnect的身份验证。
现在,当我尝试为该程序编写测试用例时,我遇到了问题。当从节点CLI运行应用程序时,它可以正常工作。即它获取代码,我也可以使用它来获取令牌!
我遇到的错误是
ERROR [source-reader.karma-typescript]: Error parsing code: Unexpected token (24:2)
in C:\VSCode\Projects\openid-client-test\javascript\node_modules\openid-client\lib\errors.js
at line 24, column 2:
... );
if (response) {
Object.defineProperty(th ...
在此错误之后,是业力赛跑者正在执行的活动-
INFO [compiler.karma-typescript]: Compiled 1 files in 3029 ms.
DEBUG [bundler.karma-typescript]: Project has 2 import/require statements, code will be bundled
DEBUG [es6-transform.karma-typescript]: Transforming C:\VSCode\Projects\openid-client-test\javascript\node_modules\openid-client\lib\index.js
这些是由Karma使用LOG_DEBUG
配置运行时生成的日志。
我没有使用Angular或任何其他UI框架。
基于这些错误,我有几个问题-
Q1:我不知道为什么业力会解析node_modules文件夹中的js文件?我在tsconfig.json中排除了它。
基于错误发生之前的活动,我注意到它无法捆绑openid-client库的必需文件。但是,如果我为此库运行browserify捆绑包,它将成功。我想我在下面列出的任何文件中都做了一些配置错误。
Q2:请帮助我确定哪个配置属性有问题!,否则解决方案本身也将不胜感激!
Q3:对我来说令人担忧的问题-openid-client与业力测试运行程序不兼容吗?这样的限制可能吗?我在GitHub存储库中没有看到任何对应的issue。
以下是我不断编辑以解决此错误的感兴趣的文件。但是,我想我现在撞墙了。
为了专注于该问题并以黑白方式查看openid-client是否是导致该问题的原因,我介绍了一个针对茉莉花框架的最小测试用例。规格看起来像这样-
probe.spec.ts文件
import { Issuer } from 'openid-client';
describe('Hello', () => {
it('Checks', () => {
expect('hello').toBe('hello');
})
});
现在,在进行实验时,我已经在第一行中删除了导入。如果完成的话;业力启动并报告测试用例成功!
package.json文件的依赖项(包括开发)
"dependencies": {
"@types/node": "^12.7.5",
"amazon-cognito-auth-js": "^1.3.2",
"atob": "^2.1.2",
"openid-client": "^3.7.2",
"typescript": "^3.6.3",
"xmlhttprequest": "^1.8.0"
},
"devDependencies": {
"@types/jasmine": "^3.4.1",
"jasmine-core": "^3.5.0",
"karma": "^4.3.0",
"karma-chrome-launcher": "^3.1.0",
"karma-coverage-istanbul-reporter": "^2.1.0",
"karma-jasmine": "^2.0.1",
"karma-jasmine-html-reporter": "^1.4.2",
"karma-spec-reporter": "0.0.32",
"karma-typescript": "^4.1.1",
"karma-typescript-es6-transform": "^4.1.1"
}
tsconfig.json看起来像这样-
{
"include": [
"src/**/*.ts"
],
"exclude": [
"node_modules"
],
"compilerOptions": {
"module": "commonjs",
"target": "es2016",
"noImplicitAny": false,
"strictNullChecks": true,
"moduleResolution": "node",
"sourceMap": true,
"importHelpers": true,
"outDir": "output",
"baseUrl": ".",
"typeRoots": [
"node_modules/@types"
],
"types": [
"@types/jasmine",
"@types/node"
],
"lib": [
"es2017",
"dom",
"es2015.generator",
"es2015.iterable",
"es2015.promise",
"es2015.symbol",
"es2015.symbol.wellknown",
"esnext.asynciterable"
]}
}
karma.conf.js看起来像这样-
module.exports = (config) => {
config.set({
frameworks: ['jasmine', 'karma-typescript'],
plugins: [
'karma-jasmine',
'karma-typescript',
'karma-chrome-launcher',
'karma-spec-reporter',
'karma-typescript-es6-transform'
],
karmaTypescriptConfig: {
tsconfig: "./tsconfig.json",
compilerOptions: {
allowJs: true
},
bundlerOptions: {
entrypoints: /\.spec\.(ts|tsx)$/,
addNodeGlobals: true,
transforms: [require("karma-typescript-es6-transform")()]
}
},
files: [{ pattern: 'src/**/*.+(js|ts)' }],
preprocessors: {
'src/**/*.+(js|ts)': ['karma-typescript']
},
client: {
clearContext: false
},
reporters: ['spec', 'karma-typescript'],
colors: true,
logLevel: config.LOG_DEBUG,
autoWatch: true,
browsers: ['Chrome'],
singleRun: true
})
}
TL; DR-因果型脚本有一个known limitation,这会导致错误。即使没有karma-typescript插件;到目前为止,node-openid-client也为not expected to work in browser(2019年10月2日至16T:30UT)。因此,是的,我无法将节点打开的客户端与业力一起使用(它无法工作without browser甚至as-of now(2-October-2019T16:30UT))。可行的alternate是使用摩卡代替业力。
上述结论的详细信息
Line 16: Object.assign(
Line 17: this,
Line 18: {error},
Line 19: (error_description && {error_description}),
Line 20: (error_uri && {error_uri}),
Line 21: (state && {state}),
Line 22: (scope && {scope}),
Line 23: (session_state && {session_state}),
Line 24: );
ERROR [source-reader.karma-typescript]: Error parsing code: Unexpected token (72:8) in C:\VSCode\Projects\openid-client-test\javascript\node_modules\openid-client\lib\issuer.js at line 72, column 8: ... keystore(reload = false) { assertIssuerConfigu ...
File
issuer.js第72行附近的区域看起来像这样
Line 68 /**
Line 69 * @name keystore
Line 70 * @api public
Line 71 */
Line 72 async keystore(reload=false) {
Line 73 assertIssuerConfiguration(this, 'jkws_uri');
为了测试这个假设,我删除了async关键字,并注意到错误位置移至了下一个异步事件。我在node-openid-client库中找不到很多错误。但是在karma-typescript插件中,当文件捆绑在一起时,出了点问题。在他们的存储库中搜索不会产生任何提示。在其中我意识到可能引起问题的配置。
File
第113行周围的区域看起来像这样-
...
Line 111 const defaultBundlerOptions: BundlerOptions = {
Line 112 acorOptions: {
Line 113 ecmaVersion : 7,
Line 114 sourceType : "module"
Line 115 },
...
[通过集中搜索,我找到了SO问题karma-typescript: import JS file with Async keyword。显然,这是一个带有因果类型脚本的open issue,尚处于打开状态(2-October-2019T16:30UT)。无需更改js文件,您可以设置karma-typescript的未记录属性。但是,这并不能使我更接近我所希望的解决方案!回答个别问题
Q1:我想知道为什么业力会解析node_modules文件夹中的js文件?我在tsconfig.json中排除了它。
[[A1
[[A2karmaTypescriptConfig.bundlerOptions.acorOptions
接受JSON,并且可以在karma.conf.js中将其设置为 karmaTypescriptConfig: {
bundlerOptions: {
acornOptions: {
ecmaVersion: 8,
},
transforms: [require("karma-typescript-es6-transform")()]
}
Q3:让我担心的问题-openid-client与业力测试运行程序不兼容吗?这样的限制可能吗?我没有在GitHub存储库中看到任何相应的问题。
[A3