【问题标题】:How do you debug Jasmine tests with Resharper?你如何使用 Resharper 调试 Jasmine 测试?
【发布时间】:2013-04-19 18:45:08
【问题描述】:

在 Visual Studio 2012 中使用 Resharper 运行 Jasmine 测试时,我找不到调试(遍历)JavaScript 代码的方法。我尝试使用浏览器 (Chrome) 运行测试,但测试运行器在测试后立即关闭端口已运行,因此我无法在代码中放置断点。还尝试在 Internet Explorer 中运行并在 Visual Studio 中放置断点,但它不会附加到进程。我的测试有很多 ///reference 脚本,Resharper 自动包含在测试运行器中,但我不想为我要调试的每个测试手动执行此操作。请帮助我理解这一点。如果你有一个 jasmine 测试失败,那么你如何调试它?

【问题讨论】:

  • 到目前为止,我的解决方法是不使用 Resharper 进行调试。做手动工作:获取 Jasmine Standalone Test Runner 并在脚本标签中包含所有引用并包含测试本身。然后在浏览器的开发者控制台中调试。
  • 我是否正确理解 Re# runner 打开浏览器并且您想在浏览器中调试您的规范?
  • @zbynour 不能这样做,因为它会在测试完成后立即关闭 http 端口。

标签: javascript unit-testing resharper jasmine


【解决方案1】:

我知道这是一个老问题,这个答案有点偏离主题,但如果你不想干扰回调 Chutzpah 测试运行器上下文菜单可以在这里为你提供支持。在 resharper/phantomjs 中运行测试(这样您就不会出现标签爆炸)并在 Chrome(或您首选的浏览器)中进行调试,然后单击鼠标右键:

Chutzpah Test Runner Context Menu Extension

【讨论】:

    【解决方案2】:

    正如我在 Debugging jasmine tests with resharper and phantom js 上发布的那样

    我有调试器;通过在 ReSharper 选项中将 IE 11 设置为我的测试浏览器来工作。很酷的是,您可以在 Visual Studio 版本的代码中设置断点,并使用 Visual Studio 进行设置和调试。你真的不需要与浏览器交互。

    【讨论】:

      【解决方案3】:

      由于我没有让debugger; 工作,我找到了另一个解决方案。 通过将以下内容添加到我的测试中,resharper 将不会收到测试已完成的通知,因此我们可以在打开的浏览器中设置调试断点(我使用 chrome)并更新 (F5) 页面。

      jasmine.getEnv().currentRunner_.finishCallback = function () {};
      

      由于Jasmine 2.0你需要使用:

      ReSharperReporter.prototype.jasmineDone = function () { };
      

      完成后在 resharper testrunner 窗口中停止测试。

      QUnit 也可以这样做

      QUnit.moduleDone = function(){}
      

      【讨论】:

      • 不是最明显的解决方案 :) 感谢 @Kestas 的 Jasmine 2.0 部分
      • 另外,如果测试在 TypeScript 文件中,访问 ReSharperReporter 全局变量时会出错。一种解决方法是使用如下语法:window['ReSharperReporter'].prototype.jasmineDone = function () { };
      【解决方案4】:

      尝试使用debugger 关键字。只需将以下行添加到您要调试的代码中(可能添加到规范中):

      debugger;
      

      它调用任何可用的调试功能。它不能在 IE 中运行,但在 Chrome 中运行良好(你写了你使用它,所以我想它仅用于调试就足够了)。

      当然,在那之后一定要删除debugger关键字!也许没有真正简单的方法可以在一般的生产代码中避免它(如果您不仅会在 spesc 中使用它),但如果您对此感兴趣,那么question 可能会有所帮助。

      【讨论】:

      • 太好了,我认为debugger; 仅在 IE 中支持,因为我以前使用过它,但不知道它也存在于 Chrome 中。谢谢!
      • 这在 Chrome 中似乎对我不起作用,因为它很高兴地继续执行而无需跳转到调试器。还有其他建议吗?
      • @mklinker 请原谅我的响应时间太长...我唯一想到的是在浏览器中打开开发人员工具(因为它调用“任何可用的调试功能”所以没有调试器打开意味着它会像您写的那样愉快地继续)。但我不知道是否可以这样做(以哪种方式打开浏览器)。目前我使用 Testacular 运行器,因此很容易在捕获的浏览器中打开开发工具(因为它保持打开状态)。
      • 这不起作用,因为每次您按“运行单元测试”时 ReSharper 都会打开一个新页面,并且您无法快速按 F12 以在浏览器上打开开发者控制台。 ReSharper 会随机化运行测试服务器的端口,因此浏览器无法记住您已经按 F12。
      猜你喜欢
      • 1970-01-01
      • 2013-09-06
      • 2017-11-22
      • 2014-01-11
      • 1970-01-01
      • 2016-01-19
      • 2011-09-04
      • 2013-07-26
      • 1970-01-01
      相关资源
      最近更新 更多