打字稿测试,有Karma,Jasmine和Grunt

时间:2016-01-28 00:15:20

标签: gruntjs typescript jasmine karma-runner karma-jasmine

我一直在尝试使用Karma + Jasmine来运行用TypeScript编写的测试。

在线搜索,似乎有不少人已经设法完成了这项壮举,但我找不到关于如何做到这一点的完整指南。环境:

  • 使用ES6模块的打字稿
  • 茉莉
  • 咕噜

如何建立整个事物?

2 个答案:

答案 0 :(得分:2)

有关完整来源,请参阅此GitHub repository

的package.json

让我们从devDependencies开始:

"devDependencies": {
    "grunt": "^0.4.5",
    "grunt-contrib-watch": "^0.6.1",
    "grunt-karma": "^0.12.1",
    "grunt-ts": "^5.1.0",
    "jasmine-core": "^2.3.4",
    "karma": "^0.13.15",
    "karma-jasmine": "^0.3.6",
    "karma-phantomjs-launcher": "^0.2.1",
    "karma-requirejs": "^0.2.3",
    "load-grunt-tasks": "^3.3.0",
    "phantomjs": "^1.9.18",
    "requirejs": "^2.1.22"
}

Gruntfile.js

观看

我们会查看所有.ts个文件,并在更改后首先进行转换,然后运行测试:

watch: {
    typescript: {
        // Watching all typescript files (specs and units)
        files: [ 'source/**/*.ts' ],
        // First transpile, then run tests
        tasks: [ 'ts:default', 'karma:continuous:run' ],
        options: {
            spawn: false
        }
    }
},

打字稿编译

我们使用 amd 模块转换所有.ts个文件。请注意,我们需要茉莉花的类型:

ts: {
    default: {
        src: [
            // Note that we add the typings for jasmine here
            'typings/jasmine.d.ts',
            // We compile all .ts files (specs and units)
            'source/**/*.ts'
        ],
        options: {
            // We need to convert ES6 to ES5 and use amd so it works
            // with RequireJS
            module: 'amd',
            fast: 'never'
        },
        // We output all files to a temp folder
        outDir: 'transpiled'
    }
},

所有.ts文件都在transpiled文件夹中,我们可以运行业力测试:

karma: {
    options: {
        configFile: 'karma.conf.js'
    },

    continuous: {
        logLevel:  'INFO',
        singleRun: false,
    }
}

karma.conf.js

最棘手的部分:

  • 我们将requirejs添加为框架。
  • 我们加载所有已转换的文件,但include标志设置为false。
  • 名为test-main.js的文件然后扫描这些文件并动态加载所有.spec文件以进行测试。 test-main.js由Karma生成,有关详细信息,请参阅this guide

像这样:

module.exports = function(config) {
    config.set({
        // Note that we also use `requirejs`
        frameworks: [ 'jasmine', 'requirejs' ],

        files: [
            // We add all transpiled files (specs and unit) with included set
            // to false.
            { pattern: 'transpiled/**/*.js', included: false },

            // Test main will search the files for specs and load them
            // dynamically.
            'test-main.js'
        ],

        reporters: [ 'progress' ],

        browsers: [ 'PhantomJS' ],

        autoWatch: false,
        singleRun: true
    })
}

答案 1 :(得分:1)

看一下使用karma-typescript-preprocessor,这可能比观看,编译然后运行测试更容易一些。

这可以很容易地设置为karma和/或grunt配置。