如何在之前的描述中跳过下一个描述()错误?茉莉花试验

时间:2013-12-31 14:17:45

标签: javascript jasmine

我正在使用此类代码,以便在其中一个describe函数中出现错误时停止整个it()

if(this.results_.failedCount > 0) {
        //next step will finish the test
   jasmine.Queue.prototype.next_ = function () {
   // to instead skip to the end
        this.onComplete();
   }
}

我从How can I make jasmine.js stop after a test failure?

获得了它

然而,如果我在文件中有很少的描述块,并且第一个描述失败,我希望它继续下一个描述而不是杀死整个测试。 我怎么能这样做?

感谢

2 个答案:

答案 0 :(得分:0)

我设法提出了一个简单的解决方法。

if(this.results_.failedCount > 0) {
        //get suite id:
        var currentSuite = jasmine.currentEnv_.currentSpec.suite.id;

        //get number of children (its)
        var numChildren = jasmine.currentEnv_.currentSpec.suite.children_.length;

        //skip to last child
        jasmine.currentEnv_.currentRunner_.suites_[currentSuite].queue.index = numChildren - 1;
}

如果测试失败,我得到套件ID,找到它有多少个孩子(多少it s),然后更改跑步者队列中的索引。它基本上会跳过当前描述中it的其余部分,然后转到下一个描述块。

答案 1 :(得分:0)

灰粉, 我已经使用了AfterEach内部解决方法中的代码,它似乎可行。谢谢 :) 如果您希望其他规格失败(而不是仅仅跳过) 在if:

中添加以下代码

if(currentIt&&(currentIt.results_.failedCount!== 0)){

var currentSuite = jasmine.getEnv().currentSpec.suite.id;
var currentSpec = jasmine.getEnv().currentSpec.id;

//get number of children (its)
var numChildren = jasmine.getEnv().currentSpec.suite.children().length;

//skip after last child
jasmine.getEnv().currentRunner().suites()[currentSuite].queue.index = numChildren-1;
//finish the current spec now (otherwise the spec will be reported after his siblings)
jasmine.getEnv().currentSpec.finish();
jasmine.getEnv().currentSpec.finishCallback = function(){};

//report the other sibilings as failures
for (var index = currentSpec+1; index < numChildren ; index++){
   var spec = jasmine.getEnv().currentSpec.suite.children()[index];
   jasmine.getEnv().currentSpec = spec;
   (new AddIndexPlugin()).doBefore();

   spec.results().failedCount = 1;
   spec.results().totalCount = 1;
   spec.results().skipped = true;
   spec.results().getItems().push(new jasmine.ExpectationResult({actual:'skipping test because previous test failed',passed:false , message:'skipping test because previous test failed',trace:'skipping test because previous test failed'}));

   spec.finish();}

现在,Jasmine实际上是一个E2E测试框架,而不仅仅是单元测试框架。