Jasmine / Protractor:在beforeEach中停止测试失败

时间:2014-04-17 15:51:33

标签: jasmine protractor

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

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

显然,如果第一步失败,执行第二步没有任何意义(实际上它是非常有害的,因为用户被锁定这是不好的)。我尝试添加“expect”作为第1步的一部分,但第2步仍然执行 - >新鲜的想法。

4 个答案:

答案 0 :(得分:2)

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

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但我不确定在每种情况发生之前它会如何表现。

答案 1 :(得分:2)

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

然后打电话:

jasmine.getEnv().bailFast();

(功劳归hurrymaplelad写了一个npm就是这样,但是你不需要使用它)

答案 2 :(得分:0)

jasmine-bail-fast完全按照你所做的覆盖specFilter函数,但在afterEach上完成。所以它只会在第一次"它之后失败。运行。它不会帮助解决这个具体案例。

答案 3 :(得分:0)

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

例如在量角器配置中:

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