jasmine2:如何处理失败之前所有

时间:2017-12-18 16:19:17

标签: javascript jasmine protractor e2e-testing

我的jasmine2 /量角器测试看起来像这样

var testUserId = null;

describe("user test", function() {
  beforeAll(function(done) {
    createTestUser().
      .then(function(userId){testUserId = userId})
      .then(done)
      .catch(done.fail);

  it("should do stuff with the test user", function(done) {
    // bla bla
  });

  afterAll(function(done) {
    deleteTestUser(testUserId).
      .then(done)
      .catch(done.fail);
  });

})

createTestUser和deleteTestUser返回promises。如果出现问题,他们会拒绝并显示错误消息。可能现在问题是,即使在beforeAll中发生错误,测试也会开始。我得到了

Failures:
1) should do stuff with the test user
Message: [my error message from beforeAll]

如果有很多测试,它会尝试执行所有这些测试,但会出现非常sam错误消息。如果beforeAll函数失败,是否可以阻止它执行测试?

THX!

(“jasmine-core”:“2.8.0”,“量角器”:“5.2.1”)

编辑:

这不是我要求的,但至少我找到了一个解决方案来保持错误消息的数量如下:

var testUserId = null;
describe("user test", function() {
  beforeAll(function(done) {
    createTestUser().
      .then(function(userId){testUserId = userId})
      .then(done)
      .catch(done.fail("test user could not be created"));

  it("should do stuff with the test user", function(done) {
    if (testUserId) {
      // bla bla
    } else {
      done();
  });

这样我至少得到了正确的错误信息(“无法创建测试用户”)而不是“// bla bla”中未满足的期望(自然我仍然得到一个,但无论如何)。我还将函数包装在函数工厂中,这样我就不必每次都编写if条件。

1 个答案:

答案 0 :(得分:4)

据我所知,jasmine does not support that尽管受到关注:

  

在规范运行中跳过(本期)更多一点   复杂,因为根据错误的类型,Jasmine可能   仍然需要运行任何afterEach(或者依赖于all依赖)来清理   陈述下一个规范。这将需要QueueRunner   知道它给出的哪些功能是设置和拆卸而不是   只需要一个要调用的函数列表。

一种选择是使用“快速失败”选项,可以使用其中一个第三方库来完成,例如jasmine-fail-fastprotractor-jasmine2-fail-whale

除了手动检查it()函数中是否存在先前的失败之外,还有其他一些解决方法: