javascript - Hvordan kjøre jasmine-tester skrevet i typescript for node


Jeg er interessert i å teste min Express-applikasjon skrevet i TypeScript. Jeg bruker egentlig Jasmine (for å skrive testtilfeller), Webpack (for å pakke TS til JS) og Karma (testløper).

Vennligst finn filene

// 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 har fullført kompileringen med suksess, men når Karma starter i Chrome, sier det require('mongodb'); ikke funnet, jeg antar at require ikke er tilgjengelig i nettleseren.

Alt jeg vil vite er hvordan jeg kjører testene mine i node-miljø i stedet for i nettleser? Finnes det noen karma-loaders? Jeg vil skrive tester i selve Jasmine og jeg trenger webpack for å konvertere ts til js. Alt jeg ønsker er en testrunner, noe som ligner på karma, som kjører i node i stedet for i nettleser?

All hjelp er svært verdsatt.

Svar #1

Prosjektet bruker for øyeblikket ikke bare Jasmine, men også Karma. Karma-runneren skal kjøre tester i nettlesere, den er ikke egnet til å kjøre rent i Node.js.

Tester må kjøres med Jasmine-runner direkte. Node-prosjekter trenger vanligvis ikke Webpack, TypeScript-filer bør kompileres med target: 'es6' og module: 'commonjs'-alternativer.

Det finnes alternativer for å unngå TypeScript-kompileringstrinnet med tredjepartspakker som jasmine-ts.

Et annet alternativ er å bytte til et test rammeverk og kjører som har forbedret støtte for preprocessorer og dermed TypeScript i Node.js-tester - noe Jest er.

Relaterte artikler