Jasmine Spec Helpers not loaded

I am trying to write my unit tests with Jasmine and Karma in Typescript.

I installed karma, karma typescript, karma jasmine, jasmine and jasmine-ts.

I added custom tsconfig.json to the spec directory and use it in karma typescript settings.

As a rule, my tests work, however it does not execute my special assistants.

Is there something that I am missing to execute my spec helpers?


For your reference, here is my configuration:

karma.conf.js :

  module.exports = function (config) { config.set({ // base path that will be used to resolve all patterns (eg. files, exclude) basePath: '', // frameworks to use // available frameworks: https://npmjs.org/browse/keyword/karma-adapter frameworks: ['jasmine', "karma-typescript"], // list of files / patterns to load in the browser files: [ "spec/helpers/chai.ts", {pattern: "src/**/*.ts"}, {pattern: "spec/**/*.ts"} ], // list of files to exclude exclude: [], // preprocess matching files before serving them to the browser // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor preprocessors: { "src/**/*.ts": ["karma-typescript"], "spec/**/*.ts": ["karma-typescript"] }, karmaTypescriptConfig: { bundlerOptions: { entrypoints: /\.spec\.ts$/ }, tsconfig: "./spec/tsconfig.json", coverageOptions: { exclude: [/\.(d|spec|test)\.tsx?/, /\/spec\//] } }, specReporter: { maxLogLines: 3, // limit number of lines logged per test suppressErrorSummary: true, // do not print error summary suppressFailed: false, // do not print information about failed tests suppressPassed: false, // do not print information about passed tests suppressSkipped: true, // do not print information about skipped tests showSpecTiming: false, // print the time elapsed for each spec failFast: false // test would finish with error when a first fail occurs. }, // test results reporter to use // possible values: 'dots', 'progress' // available reporters: https://npmjs.org/browse/keyword/karma-reporter reporters: ['spec', "karma-typescript", "kjhtml"], // web server port port: 9876, // enable / disable colors in the output (reporters and logs) colors: true, // level of logging // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG logLevel: config.LOG_INFO, // enable / disable watching file and executing tests whenever any file changes autoWatch: true, // start these browsers // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher browsers: ['Chrome'], // Continuous Integration mode // if true, Karma captures browsers, runs the tests and exits singleRun: false, // Concurrency level // how many browser should be started simultaneous concurrency: Infinity }) } 

jasmine.json (Although I have a feeling that it is not used):

  { "spec_dir": "spec", "spec_files": [ "**/*[sS]pec.ts" ], "helpers": [ "helpers/**/*.ts" ], "stopSpecOnExpectationFailure": false, "random": false, "reporters": [ { "name": "jasmine-spec-reporter#SpecReporter" } ], "project": "./spec/" } 

tsconfig.json in the root:

  { "compilerOptions": { "emitDecoratorMetadata": true, "experimentalDecorators": true, "lib": [ "es6", "dom", "es2015.promise" ], "module": "commonjs", "target": "es5", "sourceMap": true, "outDir": "./dist/", "noImplicitAny": false, "allowJs": true, "baseUrl": "src", "typeRoots": [ "node_modules/@types", "typings" ] }, "include": [ "src/**/*" ] } 

tsconfig.json in the spec folder:

  { "extends": "../tsconfig.json", "compilerOptions": { "typeRoots": [ "../node_modules/@types", "typings" ] }, "include": [ "./**/*", "../src/**/*" ] } 

spec/helpers/chai.ts is a spec helper that is not executed by karma.

The contents of this file are:

 import * as chai from "chai"; import chaiThings = require("chai-things"); import chaiInterface = require("chai-interface"); chai.should(); chai.use(chaiThings); chai.use(chaiInterface); 

Please see https://github.com/dhilgarth/mjt for a standalone example.

+5
source share
2 answers

So the problem was that the Karma configuration had a minor misconfiguration that easily missed.

Karma's node configuration files are fully valid and meet all the test specifications that you want to download Karma.

In karmaTypescriptConfig node karma configuration, an additional filter is applied to files downloaded by karma, in your case you include only files loaded by karma that correspond to .spec.ts files.

The link could not be found for auxiliary specifications because they did not match the regular expression pattern: .spec.ts, although they are specified in the node files. Thus, helper scripts were excluded from the test after they were loaded.

To fix this, either remove the karmaTypescriptConfig node, or reconfigure it, either explicitly assign the helper, or rename the helper that will be matched by this agreement.

I removed it from the example below. The package links all files downloaded by karma by default.

The official documentation states

karmaTypescriptConfig.bundlerOptions.entrypoints - filter regular expressions, files downloaded by karma should be performed in a test run, for example, only file names ending in ".spec.ts": /. spec.ts $ /. This parameter can be used to make sure that the specifications have completed the setup of the test environment before another code begins to require modules, which otherwise can lead to subtle errors caused by the conditions of the race. The default for all files is /.*/.

Hope this helps!

karma.conf.js :

 module.exports = function (config) { config.set({ // base path that will be used to resolve all patterns (eg. files, exclude) basePath: '', // frameworks to use // available frameworks: https://npmjs.org/browse/keyword/karma-adapter frameworks: ['jasmine', "karma-typescript"], // list of files / patterns to load in the browser files: [ "spec/helpers/helper.ts", { pattern: "src/**/*.ts" }, { pattern: "spec/**/*.ts" } ], client: { clearContext: false // leave Jasmine Spec Runner output visible in browser }, // list of files to exclude exclude: [], // preprocess matching files before serving them to the browser // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor preprocessors: { "spec/helpers/helper.ts": ["karma-typescript"], "src/**/*.ts": ["karma-typescript"], "spec/**/*.ts": ["karma-typescript"] }, // test results reporter to use // possible values: 'dots', 'progress' // available reporters: https://npmjs.org/browse/keyword/karma-reporter reporters: ['progress', "karma-typescript"], // web server port port: 9876, // enable / disable colors in the output (reporters and logs) colors: true, // level of logging // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG logLevel: config.LOG_INFO, // enable / disable watching file and executing tests whenever any file changes autoWatch: true, // start these browsers // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher browsers: ['Chrome'], // Continuous Integration mode // if true, Karma captures browsers, runs the tests and exits singleRun: false, // Concurrency level // how many browser should be started simultaneous concurrency: Infinity }) } 
+3
source

Currently, the only viable options are storing helpers in a separate forlder, compiling them with tsc and adding as .js files to the karma.config file

Check out this PR for steps to get it working: https://github.com/dhilgarth/mjt/pull/1/files

  files: [ {pattern: "spec/helpers/*.js"}, {pattern: "src/**/*.ts"}, {pattern: "spec/**/*.ts"} ], client:{ jasmine: { helpers: [ "spec/helpers/*.js" ] } }, 
+1
source

Source: https://habr.com/ru/post/1271852/


All Articles