Jasmine/量角器:每次测试失败后停止测试

Jasmine/量角器:每次测试失败后停止测试,jasmine,protractor,Jasmine,Protractor,我目前正在编写测试量角器,我想知道是否有可能在beforeach中的某些内容失败时立即取消测试执行(并返回一些有用的消息,如“前置条件失败:无法登录用户”)。 也就是说,我在beforeach中有一些助手方法,可以登录用户,然后进行一些设置 beforeEach: 1) login user 2) set some user properties 显然,如果第一步失败,那么执行第二步是没有意义的(实际上,这是非常有害的,因为用户被锁定了,这是不好的)。我试图在第一步中添加一个“expe

我目前正在编写测试量角器,我想知道是否有可能在beforeach中的某些内容失败时立即取消测试执行(并返回一些有用的消息,如“前置条件失败:无法登录用户”)。 也就是说,我在beforeach中有一些助手方法,可以登录用户,然后进行一些设置

beforeEach:
  1) login user
  2) set some user properties

显然,如果第一步失败,那么执行第二步是没有意义的(实际上,这是非常有害的,因为用户被锁定了,这是不好的)。我试图在第一步中添加一个“expect”,但第二步仍然执行->新鲜出炉。

严格回答您的问题,没有外部依赖:

beforeEach(function() {
    // 1) login user
    expect(1).toBe(1);
    // This works on Jasmine 1.3.1
    if (this.results_.failedCount > 0) {
        // Hack: Quit by filtering upcoming tests
        this.env.specFilter = function(spec) {
            return false;
        };
    } else {
        // 2) set some user properties
        expect(2).toBe(2);
    }
});

it('does your thing (always runs, even on prior failure)', function() {
    // Below conditional only necessary in this first it() block
    if (this.results_.failedCount === 0) {
        expect(3).toBe(3);
    }
});

it('does more things (does not run on prior failure)', function() {
    expect(4).toBe(4);
});
因此,如果1失败,2,3,4,N将无法按预期运行


也有,但我不确定它在每个场景之前会如何运行。

jasmine bail fast完全按照您覆盖specFilter函数所做的操作,但在每个场景之后都会执行。因此,只有在运行第一个“it”之后,它才会失败。这无助于解决这个具体案件

jasmine.Env.prototype.bailFast = function() {
  var env = this;
  env.afterEach(function() {
    if (!this.results().passed()) {
      env.specFilter = function(spec) {
        return false;
      };
    }
  });
};
然后打电话:

jasmine.getEnv().bailFast();

(这要归功于谁编写了一个npm来实现这一点,但是你不需要使用它)

使用jasmine2,我们可以将
throwOnExpectationFailure
设置为
true

例如,在量角器配置中:

//protractor.conf.js
exports.config = {
  //...
  onPrepare: () => {
    jasmine.getEnv().throwOnExpectationFailure(true);
  }
};

每个街区前有两个吗?合并它们并检查第一部分的结果,只有在第一部分完成得很好时才运行第二部分。不,它的两个函数在一个块中调用。另外,主要的问题是:既然我已经知道TC会失败,那么我如何才能完全阻止它运行呢?在Jasmine 2.0中,我找不到chrome Debugger提供的
this.results()
,我的答案是Jasmine 1.x,在Jasmine 2.x出现之前