【问题标题】:How to run jasmine tests written in typescript for node如何运行用 typescript 为节点编写的 jasmine 测试
【发布时间】:2018-10-16 11:43:57
【问题描述】:

我有兴趣测试我用 typescript 编写的 express 应用程序。 基本上我使用 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,我猜 require 在浏览器中不可用。

我想知道如何在节点环境而不是浏览器中运行我的测试?有没有业力装载机?我想用 jasmine 本身编写测试,我需要 webpack 将 ts 转换为 js。我想要的只是一个测试运行器,比如在节点而不是浏览器中运行的业力?

非常感谢任何帮助。

【问题讨论】:

    标签: javascript node.js typescript webpack jasmine


    【解决方案1】:

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

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

    有一些选项可以避免使用第三方包(如 jasmine-ts)进行 TypeScript 编译步骤。

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

    【讨论】:

    • 谢谢,所以我应该直接使用 jasmine runner 运行,但我认为我需要一个从 ts 到 js 的编译阶段吗?
    • 是的。或者使用 jasmine-ts 跳过编译,它使用 ts-node 运行 Jasmine。 2018 年,我个人会选择 Jest。它的模块模拟​​功能在 Node 中是不可或缺的。
    • 太棒了。有用。我认为 moq.ts 是一个很好的模拟 typescript 的框架。你不这么认为吗?
    • 我不确定它在真实场景中的表现如何。看起来有点奇怪,因为 stubs、mock 和 spies 是密不可分的,而且它不包括 spies。也没有测试框架的支持,所以它不能与他们的断言集成——这是较小的库的问题。不过谢谢,我会仔细看看。
    猜你喜欢
    • 1970-01-01
    • 2017-11-14
    • 2018-10-16
    • 2023-03-31
    • 2018-03-11
    • 1970-01-01
    • 2017-02-11
    • 1970-01-01
    • 2020-07-02
    相关资源
    最近更新 更多