如何运行用节点的typescript编写的jasmine测试

时间:2018-05-06 15:02:43

标签: javascript node.js typescript webpack jasmine

我有兴趣测试用打字稿编写的快速应用程序。 基本上我使用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在节点中运行而不是浏览器?

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

该项目目前不仅使用Jasmine而且使用Karma。 Karma runner应该在浏览器中运行测试,它不适合纯粹在Node.js中运行。

测试需要直接与Jasmine runner一起运行。 Node项目通常不需要Webpack,TypeScript文件应该使用target: 'es6'module: 'commonjs'选项进行编译。

有一些选项可以避免使用jasmine-ts等第三方软件包进行TypeScript编译。

另一个选择是切换到测试框架和运行器,它们改进了对预处理器的支持,因此,Node.js测试中的TypeScript - Jest就是这样。