我有兴趣测试用打字稿编写的快速应用程序。 基本上我使用jasmine(编写测试用例),webpack(将ts捆绑到js)和karma(测试运行器)
请找到文件
// about.service.ts - code to be tested
import { MongoClient, MongoError, Collection, ObjectId } from 'mongodb';
export class AboutService { // functionality }
// about.service.spec.ts - test cases
import { AboutService} from 'about.service.ts';
describe('services.about.service.spec', () => {
it('should_return_null_date', () => {
// test cases here
});
});
// karma.conf.js - karma configuration file
var webpackConfig = require('./karma.webpack');
module.exports = function (config) {
config.set({
frameworks: ['jasmine'],
plugins: [
require('karma-jasmine'),
require('karma-chrome-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-webpack')
],
files: [
'somefiles'
],
mime: {
'text/x-typescript': ['ts']
},
preprocessors: {
'somefiles': ['webpack']
},
webpack: webpackConfig,
reporters: ['kjhtml'],
browsers: ['Chrome'],
client: {
clearContext: false,
captureConsole: false
},
port: 9876,
colors: true,
logLevel: config.LOG_WARN,
autoWatch: true,
singleRun: false,
concurrency: Infinity
});
}
// karma.webpack.js
var nodeExternals = require('webpack-node-externals');
module.exports = {
resolve: { extensions: ['.ts', '.js'], },
module: {
rules: [{
test: /\.ts$/,
use: ['awesome-typescript-loader']
}]
},
target: "node",
externals: [nodeExternals()]
}
Webpack已经结束了编译成功,但是当karma在chrome中启动时。它说require('mongodb'); not found
,我想要求在浏览器中不可用。
我想知道如何在节点环境而不是浏览器中运行我的测试?有没有业力加载器?我想在茉莉花本身编写测试,我需要webpack将ts转换为js。我想要的只是一个测试运行器,比如karma在节点中运行而不是浏览器?
非常感谢任何帮助。
答案 0 :(得分:3)
该项目目前不仅使用Jasmine而且使用Karma。 Karma runner应该在浏览器中运行测试,它不适合纯粹在Node.js中运行。
测试需要直接与Jasmine runner一起运行。 Node项目通常不需要Webpack,TypeScript文件应该使用target: 'es6'
和module: 'commonjs'
选项进行编译。
有一些选项可以避免使用jasmine-ts
等第三方软件包进行TypeScript编译。
另一个选择是切换到测试框架和运行器,它们改进了对预处理器的支持,因此,Node.js测试中的TypeScript - Jest就是这样。