我正在处理由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? 有没有人对我如何修复或至少调试这个问题有任何建议? 有没有替代品/更好的解决方案?
答案 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设置。