【问题标题】:Run Jasmine Tests Sequentially按顺序运行 Jasmine 测试
【发布时间】:2018-03-02 21:15:20
【问题描述】:

我正在使用 Karma/Jasmine 来运行许多规范文件。我的测试使用了一些全局函数。一些测试模拟了其他测试所依赖的全局函数。由于测试是异步运行的,因此某些测试会失败,因为全局函数的预期行为会被其他测试改变。

有没有办法按顺序运行测试?

【问题讨论】:

    标签: testing webpack jasmine karma-runner


    【解决方案1】:

    在 jasmine.json 中将“随机”设置为 false

    文件应该添加到spec/support/jasmine.json

    【讨论】:

    • 同样可以通过以下方式在规范代码中实现:jasmine.getEnv().configure({ random: false });
    【解决方案2】:

    我认为异步测试不会同时运行两个测试。这种副作用很可能会发生,因为您没有在单个测试结束后重置全局函数。如果您在每次测试后不恢复全局函数,并且下一个运行的测试(可能是套件中的任何单个测试)如果依赖于相同的函数可能会失败。

    例如(使用 sinon)

    describe("A suite", function() {
        beforeEach(function() {
          sinon.stub(someGlobal, 'someFunc')
        });
    
        afterEach(function() {
          someGlobal.sumFunc.restore()
        })
    
        it("uses global function", function() {
          ...
        });
    });
    

    *但是,您可以在 jasmine 配置中将 random 设置为 false 以按顺序运行您的规范 - https://jasmine.github.io/setup/nodejs.html

    【讨论】:

    • 你说得对,我不会重置它们。但是,如果一个测试花费的时间太长,karma 会在等待第一个测试的同时开始执行另一个测试吗?
    • 不,它一次只会运行一个测试。如果时间过长,它很可能会超时并导致单个测试失败。
    • 但是可以按顺序运行测试吗?性能下降对我来说不是什么大问题。
    • 您可以在您的 jasmine 配置中将 random 设置为 false 以按顺序运行您的规范 - jasmine.github.io/setup/nodejs.htm
    【解决方案3】:

    标志--random=false 将按顺序运行测试。我有实现这一目标的脚本:

    "test": "ENV=dev && db-migrate --env dev up && jasmine-ts --random=false && db-migrate reset --env dev",
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-17
      • 2010-09-05
      • 2015-12-21
      • 2020-09-29
      • 2015-09-21
      • 1970-01-01
      相关资源
      最近更新 更多