我正试图在一个类型记录环境中用Jasmine编写我的单元测试。
我安装了业力,业力类型记录,业力-茉莉花,茉莉花和茉莉花。
我已经将一个自定义tsconfig.json添加到spec目录中,并在业力类型记录设置中使用它。
一般来说,我的测试是有效的,但是它不执行我的规范助手。
,我是不是缺少了什么东西来执行我的规范助手?
供您参考,以下是我的配置:
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 (尽管我觉得它没有被使用):
{
"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:
{
"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:
{
"extends": "../tsconfig.json",
"compilerOptions": {
"typeRoots": [
"../node_modules/@types",
"typings"
]
},
"include": [
"./**/*",
"../src/**/*"
]
}
spec/helpers/chai.ts是业力没有执行的规范助手。
该文件的内容如下:
import * as chai from "chai";
import chaiThings = require("chai-things");
import chaiInterface = require("chai-interface");
chai.should();
chai.use(chaiThings);
chai.use(chaiInterface);请参阅https://github.com/dhilgarth/mjt以获得一个自包含的示例。
发布于 2017-09-18 16:14:45
所以这里的问题是,Karma配置有一个很容易被忽略的小错误配置。
Karma配置的文件节点是完全有效的,并且匹配您希望Karma加载的所有测试规范。
业力配置的karmaTypescriptConfig节点对业力加载的文件应用额外的过滤器,在您的情况下,您只包括与.spec.ts文件匹配的业力加载的文件。
绑定程序找不到帮助器规范,因为它们不匹配regex模式:.spec.ts,尽管它们是在文件节点下指定的。因此,在加载辅助脚本之后,它们将被排除在测试之外。
修复方法是要么删除karmaTypescriptConfig节点,重新配置它以显式匹配帮助器,要么重命名由给定匹配器匹配的助手。
我已经从下面的例子中删除了它。在默认情况下,绑定程序将绑定由Karma加载的所有文件。
官方文件指出
karmaTypescriptConfig.bundlerOptions.entrypoints --在测试运行中应该执行由Karma加载的regex筛选,例如,只有文件名以".spec.ts":/.spec.ts$/结尾。此设置可用于确保规范在其他代码开始需要模块之前已经完成测试环境的设置,否则可能会导致由争用条件引起的细微错误。默认为所有文件/.*/。
希望这能有所帮助!
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
})
}
发布于 2017-09-18 11:41:08
目前唯一可行的选择是将帮助程序存储在单独的forlder中,用tsc编译它们,并将其作为.js文件添加到karma.config中。
检查此PR以获得使其工作的步骤: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"
]
}
},https://stackoverflow.com/questions/46245288
复制相似问题