如何将Karma与SlimerJS集成以测试ES6代码?

时间:2017-01-11 22:02:34

标签: slimerjs

我试图将SlimerJS与Karma集成,以便能够测试ECMAScript 6和AngularJS代码。

当我直接使用SlimerJS测试ES6代码时,它会加载我安装的版本0.10.2,它适用于我的ES6代码。 我的Firefox安装版本为50.1.0,当我直接通过SlimerJS调用它时,它可以正常使用SlimerJS。正如SlimerJS文档所指示的那样,我的SLIMERJSLAUNCHER变量已正确配置。

但是我需要测试AngularJS和ES6代码,所以我需要Karma,但是没有找到将SlimerJS与Karma集成的方法。

我尝试使用karma-slimerjs-launcher,但它正在加载Firefox和SlimerJS的旧版本。 当我打电话给Karma时,karma-slimerjs-launcher正在运行Firefox 38和SlimerJS 0.9.6,因此我失去了对ECMAScript 6的支持。

有一种方法可以让karma-slimerjs-launcher调用我在系统上安装的Firefox和SlimerJS版本,而不是调用那些" embedded"它似乎带来的版本?

或者有更好的方法来整合Karma和SlimerJS而不使用karma-slimerjs-launcher?

感谢。

1 个答案:

答案 0 :(得分:0)

我发现了问题的答案。 而不是使用过时版本附带的启动器,可以在没有任何浏览器的情况下简单地启动业力。

输入:

karma start

然后可以使用以下命令启动SlimerJS无头:

Xvfb-run ./slimerjs myscript.js

在JS脚本中,我们将导航指向karma服务器:

window.location.href = 'http://localhost:9876/';

SlimerJS进入Karma服务器后,测试开始运行。

这种方法的缺点是需要两个终端窗口来运行测试,所以我在Python中做了一个小脚本来解决这个问题,并作为启动器使用:

#!/usr/bin/env python3

import subprocess
import time

karma = ''
slimerjs = ''

while True:
    try:
        if not karma:
            # Load a Karma server
            print('\nKarma is loading...\n')
            karma = subprocess.Popen('./karma start', shell=True)

            # delays for 2 seconds for waiting Karma server
            time.sleep(2)

            # Load a headless SlimerJS that points to Karma server
            slimerjs = subprocess.Popen(
                'xvfb-run slimerjs slimerjs-cfg.js > slimerjs.log', shell=True)
            print('\nSlimerJS is running...\n')
    except KeyboardInterrupt:
        karma.kill()
        print('\n\nKarma is stopped...\n')
        slimerjs.kill()
        print('\nSlimerJS is stopped...\n')
        break

这样就可以在一个控制台窗口中与slimerJS一起启动业力,只需输入:

./karma-run.py

如果其他人在将业力与slimerjs整合到测试ES6时遇到同样的问题,那么这就是我的解决方案。