【问题标题】:BeforeAll and AfterAll in javascript test casesjavascript 测试用例中的 BeforeAll 和 AfterAll
【发布时间】:2014-03-10 16:36:40
【问题描述】:

我想在所有测试之前做点什么,那么之后呢?组织代码的最佳方式是什么?例如:备份一些变量 -> 清除它们 -> 测试一些东西 -> 恢复备份。 'beforeEach' 和 'afterEach' 太贵了。谢谢!

【问题讨论】:

    标签: javascript unit-testing jasmine jasmine-jquery


    【解决方案1】:

    一个非常简单的解决方案:

    describe("all o' my tests", function() {
    
      it("setup for all tests", function() {
        setItUp();
      });
    
      describe("actual test suite", function() {
    
      });
    
      it("tear down for all tests", function() {
        cleanItUp();
      });
    
    });
    

    这样做的好处是您可以真正将设置/拆卸放在任何地方(例如,在嵌套套件的开始/结束处)。

    【讨论】:

    • 如果您在 it 块中改变状态,您可能会引入代码异味。 it 块仅用于无逻辑断言。
    【解决方案2】:

    Jasmine >=2.1 支持 beforeAll/afterAll 为您的套件进行一次性设置和拆卸。

    如果您使用 Jasmine 1.x,您可以为此使用 it(根据其他人的建议)或加载支持 beforeAll/afterAll 的 node_module,例如 jasmine-before-all

    【讨论】:

      【解决方案3】:

      在所有测试开始之前调用函数是微不足道的;但是,Jasmine(至少是 1.3.1)不允许您在报告器 API 之外指定自己的完成回调。

      这是我在Google Groups 上找到的一个快速小技巧。将此添加到您的 SpecRunner.html 或等效项。

      var oldCallback = jasmineEnv.currentRunner().finishCallback;
      
      jasmineEnv.currentRunner().finishCallback = function () {
          oldCallback.apply(this, arguments);
      
          // Do your code here
      };
      
      jasmineEnv.execute();
      

      【讨论】:

        【解决方案4】:

        Jasmine 提供了编写您自己的记者并附上的选项。要实现一个记者,有基本的回调,如initializejasmineStartedjasmineDone。有了这个,你可以达到你的要求。比如Jasmine 2.0,参考jasmine-html.js文件有个基本的了解。

        【讨论】:

        • 查看Jasmine2.0独立版本,文件位置为“jasmine-standalone-2.0.0\lib\jasmine-2.0.0\jasmine-html.js”。
        猜你喜欢
        • 2022-12-09
        • 2019-09-09
        • 1970-01-01
        • 2021-09-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-15
        • 1970-01-01
        相关资源
        最近更新 更多