3

如何让 Resharper 7 测试运行器显示 Jasmine 测试的堆栈跟踪。

我的设置是 Resharper 7(在 Jasmine 中构建)测试运行程序和 PhantomJs。执行任何失败的测试时,错误消息总是以:

Exception doesn't have a stacktrace

在 1.6 “Lavender” 版本的 Phantom 中添加了在发生错误时打印堆栈跟踪的功能。

要复制它,只需创建一个 mytest.js 文件并向其中添加以下代码:

describe("A suite", function() {
  it("contains spec with an expectation", function() {
    expect(true).toBe(false);
  });
});
4

3 回答 3

7

抱歉,我不使用 Resharper,但我曾经在 phantomjs 和 jasmine ConsoleReporter 上遇到过同样的问题。

我认为这归结为这样一个事实,即 jasmine 不会因预期失败而抛出错误消息,并且只有在实际抛出错误时(jasmine.js)才会由 phantomjs 捕获堆栈:

jasmine.ExpectationResult = function(params) {
...
var trace = (params.trace || new Error(this.message));
};

如下更改该行为我修复了它:

var err;
try { throw new Error(this.message); } catch(e) { err = e };
var trace = (params.trace || err);
于 2012-10-19T22:25:13.660 回答
5

在您拥有 javascript (jasmine) 单元测试的规范文件中,您需要引用正在测试的源代码。通常你在 SpecRunner.html 中有这个,但是 Resharper 滚动它自己的 SpecRunner。

将此参考行添加到 XyzSpec.js 文件的顶部

/// <reference path="/js/path-goes-here/your-file-here.js" />

describe("Utils", function () {
    describe("when calculating quantity", function() {
...

让我几乎发疯,直到我开始在 Resharper 的规范运行器中环顾四周。

PS:如果出现新问题“单元测试运行程序无法加载测试程序集”并且您将 Chrome 作为默认浏览器,请在 Resharper 选项中更改 javascript 单元测试的浏览器。

于 2012-08-07T15:41:30.897 回答
3

当我记录问题时,得到了 Jetbrains Resharper 团队的良好响应。他们修复了它,它在 Resharper 的 7.1 版本中,可以从他们的EAP 站点下载

于 2012-10-26T16:46:39.520 回答