如何调试使用Testacular (Karma)运行的Jasmine规范?
How do I debug a Jasmine spec run with Testacular (Karma)?
我有一个使用Jasmine规格的小项目,我使用Testacular作为我的测试运行器。我不明白我如何调试,无论是应用程序代码还是规范代码。当我尝试在Chrome Dev Tools中设置一个断点时,它不会在下次规格运行时被击中,因为它每次都用一个新的查询字符串加载文件。
到目前为止,我发现最好的事情是使用console.log(),但我宁愿使用Chrome Dev Tools断点。
(我使用Visual Studio 2012进行开发)
谢谢
Testacular不是用于调试的最佳工具。它的强大之处在于它可以在多个浏览器中运行测试,并且速度极快,并且可以在每次更改文件时执行测试,因此它会告诉您是否破坏了测试。但是如果您需要调试,它不是最好的工具。
您确实可以在代码中放入一个"调试器"语句来导致它中断,但是如果同一行代码在多个测试中被击中,那么您最终可能会在测试中几十次或更多次遇到相同的断点。它可能只在一个给定的场景中中断,所以您必须跳过所有的断点,除了您看到问题的那个断点。如果您使用的是mocha或jasmine,那么有一种方法可以在整个测试套件中只运行一个测试。对于jasmine,它将一个测试从it()更改为iit(),对于摩卡,它是it.only()。但即便如此,testular仍然不适合这项工作。
一个更好的解决方案是使用一个不同的测试"设置",只运行一个失败的测试。这很容易使用jasmine或mocha或任何您选择的测试框架来完成。因为testacular是一个自动化工具,而不是一个测试框架,所以您已经在其中一个框架中编写了testacular测试。所以,只要创建一个测试运行器文件,并使用它,加载文件,如果你使用chrome浏览器,进入开发工具,在MAC上按Command-O或在windows上按Control-O,选择你想要放置断点的文件,并设置断点,然后你正在与燃气烹饪。
在测试框架中使用传统的"测试运行器"不会与使用testacular发生冲突。两人将会愉快地一起奔跑。
以下是我在3个主要测试框架中做此工作的首选文章的链接:
茉莉花:http://net.tutsplus.com/tutorials/javascript-ajax/testing-your-javascript-with-jasmine/
QUnit: http://www.testdrivenjs.com/getting-started/qunit-setup/
Mocha:我没有好文章的链接。到2013年2月中旬,我的PluralSight,com关于测试客户端JavaScript的课程将会发布,你可以在那里找到它,以及关于设置QUnit和Jasmine的详细说明。他们有一个简短的免费试用,你可以使用它来观看内容而无需付费。当课程发布时,这个URL将链接到该课程。http://pluralsight.com/training/Authors/Details/joe-eames
你可以单独使用debugger;
语句,只要开发者工具面板打开并启用断点,Chrome就会在该语句上中断。
我最喜欢的调试Karma测试的方法是使用这个插件:
- https://github.com/dfederm/karma-jasmine-html-reporter
我这样启动Karma:
karma start karma.conf.js --browsers=Chrome --single-run=false --reporters=kjhtml
这将打开Karma在调试模式下的"debug"按钮。当你点击它时,它会在Chrome窗口中运行所有的测试,并显示结果。在这一点上,你可以使用开发工具,设置断点,步进代码等正常。
更棒的是,你可以点击一个失败的测试,它会切换到只运行一个测试的模式。现在您可以快速测试和调试一个测试,而不必等待所有其他测试运行。
要看到它的作用,这里是一个GitHub拉请求,我将这个库添加到我们的项目中:
https://github.com/edx/edx-ui-toolkit/pull/12- 如何使用phaser使html5游戏在移动设备浏览器上运行
- 使用压缩的JavaScript文件(不是运行时压缩)
- Javascript运行php文件,然后下载文件
- chrome扩展:尽管运行了at:documentidle,js脚本还是过早启动
- 我已经创建了一个jquery转盘,并使用if条件来运行和停止转盘
- Angularjs代码未在匿名函数中运行
- jquery设置为使用参数运行
- 如何根据时间运行不同的脚本
- Meteor方法在客户端返回null,在客户端运行的相同方法返回正确的值
- 将文本框链接到由按钮运行的javascript公式
- 为什么不是't运行此Javascript的Chrome
- ng应用程序使脚本无限运行
- 如何在运行时在angular 2中加载外部js脚本
- 与运行长作业(javascript,node.js)的第三方API同步的最佳实践
- 如何在Travis CI中以无头模式运行茉莉花规范
- 如何为每个启动配置多次运行相同的规范
- 在运行使用Widget工厂构建的jQuery插件的jasmine规范时出现TypeError
- 任何使用grunt-contrib-jasmine输出规范运行程序的方法
- Javascript测试夹具,或者,如何让我的规范在单页应用程序上运行
- 如何调试使用Testacular (Karma)运行的Jasmine规范?