如何使用Karma测试AngularJS / SocketStream / Node.js应用程序

时间:2013-05-08 16:45:45

标签: node.js angularjs karma-runner socketstream

我正在处理由SocketStream / node.js服务器提供的AngularJS应用程序。 我有一个AngularJS服务,它在SocketStream服务器上调用api函数,到目前为止进展良好。

但是现在是开始编写第一个测试的时候了,第一个想到的测试框架是Karma / Jasmine,因为这是推荐的AngularJS设置。

到目前为止一切顺利,但由于我的AngularJS模块是使用'require'导入的(SocketStream的版本,不是 require.js)并且服务器api调用是测试的一部分,我需要配置Karma加载SocketStream(至少是它的客户端)。

我好好看看'https://github.com/yiwang/angular-phonecat-livescript-socketstream',但是当我运行这个例子时,我得到了运行时错误,可能是因为我安装了更多版本的variuous依赖项。

通过将'ss.client.packAssets()'添加到app.js并运行'SS_PACK = 1 node app.js',我设法通过打包我的SocketStream应用程序来解决'必需'问题,但当我启动karma时它会记录一条错误消息:

'Chrome 23.0 (Linux) ERROR
    Uncaught TypeError: undefined is not a function
    at /the...path/client/static/assets/app/1368026081351.js:25'

'1368026081351.js'是SocketStream打包资产文件。如果我不加载它,错误消息就像'require is undefined',所以我最好的猜测是错误发生在SocketStream需要代码的某个地方。另外,因为我在DEBUG模式下运行业力,并且可以看到所有正在服务的文件。

我一直在尝试不同的方法,以找出正在发生的事情,但现在可以利用。所以我的问题是:

是否有其他人使用Karma成功测试AngularJS / SocketStream? 有没有人对我如何修复或至少调试这个问题有任何建议? 有没有替代品/更好的解决方案?

1 个答案:

答案 0 :(得分:3)

时间回答,我自己的问题:

排序,因为我得出的结论是Karma和node.js / SocketStream有很多重叠,所以我决定看看我是否可以完全省略Karma并通过SocketStream提供Jasmine测试平台。事实证明这是可能的,这就是我如何做到的:

我在'app.js'文件中定义了一个新的SocketStream路由和客户端:

ss.client.define( 'test', {
    view: 'SpecRunner.html',
    css:  ['libs/test'],
    code: ['libs', 'tests', 'app'],
    tmpl: 'none'
});

ss.http.route( '/test', function(req, res) {
    res.serveClient( 'test' );
});

我下载了jasmine-standalone-1.3.1.zip并将'SpecRunner.html'复制到'client / views'文件夹。然后我编辑它以使其加载AngularJS和所有SocketStream客户端文件,就像所有其他视图一样:

<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.0.6/angular.min.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.0.6/angular-resource.min.js"></script>
<SocketStream/>

我删除了导入示例源文件('Player.js'和'Song.js')和规范的'script'标签,但是让最后一个'script'块保持不变。

然后我在'client / css / libs'中创建了一个名为'test'的新文件夹,并在其中复制了'jasmine.css'未修改。

然后我将'jasmine.js'和'jasmine-html.js'重命名为'01 -jasmine.js'和'02 -jasmine-html.js'但未修改为'/ client / code / libs ”。

现在Jasmine已经到位,将使用'/ test'路由调用。稍微不满意的是我没有找到一个优雅的地方来存储我的spec文件。如果我将它们放在'libs'文件夹中,它们只能工作到目前为止。在其他任何地方,它们都由SocketStream作为模块提供服务,并且不会运行。

但我现在可以忍受。我可以运行Jasmine测试而无需配置特殊的Karma设置。