Я использую node-openid-client для выполнения аутентификации на основе OpenIDConnect с поставщиком OpenID.
Я столкнулся с проблемами при попытке написать контрольные примеры для этой программы. Когда приложение запускается из узла 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
Это журналы, созданныеКарма при запуске с LOG_DEBUG
конфигурацией.
Я не использую Angular или какие-либо другие фреймворки пользовательского интерфейса .
У меня есть несколько вопросов, основанных на этих ошибках -
Q1 : Интересно, почему karma анализирует файл js в папке node_modules? Я исключаю это в tsconfig.json.
На основании действий, выполненных до ошибки, я замечаю, что не удается связать необходимые файлы библиотеки openid-client. Тем не менее, если я запустил пакет browserify для этой библиотеки, это будет успешно. Я думаю, что я сделал некоторые настройки неправильно в любом из файлов, перечисленных ниже.
Q2 : Пожалуйста, помогите мне, как определить, какое свойство конфигурации является ошибочным! , иначе само решение будет высоко ценится!
Q3 : Меня беспокоит вопрос - Разве openid-client не совместим с бегуном по карма-тесту? Возможно ли такое ограничение? Я не увидел ни одной соответствующей проблемы в репозитории GitHub.
Ниже приведены интересующие файлы, которые я продолжал редактировать, чтобы обойти эту ошибку. Тем не менее, я думаю, что сейчас попал в стену.
Чтобы сфокусироваться на проблеме и посмотреть в черно-белых тонах, является ли openid-client причиной проблемы, я ввел минимальный тест-кейс, ориентированный на среду жасмина. ,Спецификация выглядит следующим образом -
probe.spec.ts file
import { Issuer } from 'openid-client';
describe('Hello', () => {
it('Checks', () => {
expect('hello').toBe('hello');
})
});
Теперь во время эксперимента я удалил импорт в первой строке. Если это сделано;Карма запускает и сообщает, что тестовый случай был успешным!
Зависимости (включая dev) для 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
})
}