使用Resharper 7测试运行程序,在Jasmine测试中获取堆栈跟踪信息

3
如何获取Resharper 7测试运行器以显示Jasmine测试的堆栈跟踪。
我的设置是Resharper 7(内置Jasmine)测试运行器和PhantomJs。执行任何失败的测试时,错误消息总是以以下内容结尾:
Exception doesn't have a stacktrace

在Phantom的1.6“Lavender”版本中,添加了一个特性,当发生错误时可以打印出堆栈追踪信息。

要复制这个特性,只需创建一个名为mytest.js的文件,并将以下代码添加到其中:

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

1
你可能想在这里提出问题:http://devnet.jetbrains.net/community/resharper/resharper_eap 或者在这里:http://devnet.jetbrains.net/community/resharper/resharper_community?view=discussions - bitbonk
你是否收到了错误信息?我在Phantomjs和Chrome中都只看到了“未定义”之前的“异常没有堆栈跟踪”。 - mikebridge
我也是。在“异常没有堆栈跟踪”之前,我得到了未定义的结果,但除此之外什么都没有。 - Mharlin
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);

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的spec runner。

PS:如果出现新问题“Unit Test Runner failed to load test assembly”,并且你的默认浏览器是Chrome,请在Resharper选项中更改javascript单元测试的浏览器。


我已经有了我的JavaScript文件的引用。如果我没有添加它,我的测试会失败。不幸的是,仍然没有堆栈跟踪,但我告诉了R#团队,他们计划在7.1版本中实现。 - Mharlin

3

当我记录问题并向Jetbrains Resharper团队发出请求时,他们给了一个很好的回应。他们修复了这个问题,并将其包含在Resharper的7.1版本中,可以从他们的EAP网站下载。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接