【问题标题】:Is jasmine supposed to execute specs in the order they are declared or in a random order?茉莉花应该按照声明的顺序还是随机顺序执行规范?
【发布时间】:2015-05-05 11:25:36
【问题描述】:

取消注释最后一个规范。一切都崩溃了……为什么?

describe('test', function() {
  var index = 1;

  it('test 1', function() {
    expect(index).toBe(1);
    index++;
  });

  it('test 2', function() {
    expect(index).toBe(2);
    index++;
  });

  it('test 3', function() {
    expect(index).toBe(3);
    index++;
  });

  it('test 4', function() {
    expect(index).toBe(4);
    index++;
  });

  it('test 5', function() {
    expect(index).toBe(5);
    index++;
  });

  it('test 6', function() {
    expect(index).toBe(6);
    index++;
  });

  it('test 7', function() {
    expect(index).toBe(7);
    index++;
  });

  it('test 8', function() {
    expect(index).toBe(8);
    index++;
  });

  it('test 9', function() {
    expect(index).toBe(9);
    index++;
  });

  it('test 10', function() {
    expect(index).toBe(10);
    index++;
  });

  // it('test 11', function() {
  //   expect(index).toBe(11);
  //   index++;
  // });

});

感谢@PWKad 指出当测试超过 10 次时会发生这种情况。

【问题讨论】:

  • 它总是按照我声明的顺序运行。我唯一的建议是将真正的套件减少到显示问题的最低限度并在问题中发布该代码。
  • 我没有大量使用 jasmine 的经验,但是对于一般的单元测试,你不应该期望它们以任何特定的顺序运行 - 它们是 unit i> 毕竟是测试。如果特定测试需要特定条件,则应在该测试的设置/拆除中。
  • 我希望框架作者会告诉您不要依赖测试的顺序,因为这是一个实现细节,可能会随任何版本而改变。我很欣赏你上面的评论,但我怀疑依赖执行顺序会给你带来痛苦,代价是没有“丑陋”的测试。通常,您的规格可以有一个“背景”,您可以在其中进行设置。
  • @SamHolder 同意,但是有超过 10 个测试会触发随机顺序。为什么是 10+?
  • 使用tryjasmine.com 中包含的所有 11 个规范运行它对我来说效果很好。必须特定于 jasmine 版本。我同意很高兴知道是什么原因造成的,但我仍然不会依赖特定的测试顺序。

标签: javascript unit-testing jasmine karma-jasmine


【解决方案1】:

是的,Jasmine 按顺序执行规范(它)。从 2.3.0 到 2.3.3 存在超过 10 个规范的问题。我在 2.3.3 中遇到了同样的问题,该问题在 2.3.4 中已修复。

https://github.com/jasmine/jasmine/issues/850

我只是用 2.3.4 代替了 2.3.3,我的 15 次测试终于通过了。

【讨论】:

  • 这不是默认设置,正如@Anton 所说,Jasmine 3.x 现在默认以随机顺序运行测试。
  • 那么有没有办法在 3.x 中关闭它?
  • 有没有办法禁用这个默认行为?
【解决方案2】:

目前 (v2.x) Jasmine 按照定义的顺序运行测试。但是,有一个新的(2015 年 10 月)选项可以以随机顺序运行规范,默认情况下仍处于关闭状态。根据项目所有者的说法,在 Jasmine 3.x 中它将被转换为默认值。

参考资料:

【讨论】:

    【解决方案3】:

    我现在是 2021 年,实际上,通过 npx jasmine init 的默认设置似乎默认设置了随机测试顺序。

    肯定不是大多数开发人员所期望的。 (不是我所期望的!)

    要按声明的顺序运行,请进入您的spec/support/jasmine.json 并设置:

    "random": false

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-07
      • 2010-10-24
      • 1970-01-01
      • 1970-01-01
      • 2013-02-15
      • 1970-01-01
      • 2014-03-29
      • 2012-11-19
      相关资源
      最近更新 更多