【问题标题】:How to Unit-Test JavaScript immediate functions with Jasmine / Chutzpah / JsTestDriver如何使用 Jasmine / Chutzpah / JsTestDriver 对 JavaScript 即时函数进行单元测试
【发布时间】:2012-04-10 18:23:37
【问题描述】:

我们在文件 'mediator.js' 中有一个即时函数,它将一个 'mediator' 对象添加到全局命名空间。这个“中介”是我们唯一拥有的全局对象。

现在我们对“中介”对象进行了许多不同的单元测试。而且我们希望每个测试都独立运行 - 换句话说,每个测试都需要从调用立即函数开始,以创建一个新的干净中介对象。

测试是用 Jasmine 编写的,我们使用 Chutzpah 和 JsTestDriver 运行它们。

那么我该怎么做呢?

  • 在 Chutzpah 中,我可以将每个单独的测试放入它自己的 js 文件中,并在每个测试文件中引用 mediator.js
  • 使用 JsTestDriver,我可能需要一个用于每个测试的配置文件,其中包括 mediator.js 和测试文件

我们也在考虑放弃立即模式,并有一个构造函数来创建一个Mediator对象。这将是一种耻辱,因为在生产代码中我们只需要创建一次中介,并且不希望构造函数到处乱跑污染全局命名空间。

其他人在测试即时/自调用/自执行函数时肯定遇到过这个问题。那么什么是“最佳实践”?

【问题讨论】:

    标签: javascript unit-testing jasmine js-test-driver chutzpah


    【解决方案1】:

    我认为公开调解器构造函数并让每个测试覆盖现有的全局成员可能是最好的选择。暴露一个对象构造函数将是一个大问题。听起来解决方法比仅仅暴露方法要付出更多的努力。

    类似:

    // mediator.js
    
    function createMediator(){ ... }
    
    window.mediator = createMediator();
    
    
    
    // In unit test
    
    beforeEach(function () {
      window.mediator = createMediator();
    });
    

    【讨论】:

      猜你喜欢
      • 2017-06-21
      • 1970-01-01
      • 2016-07-18
      • 2021-01-29
      • 2016-03-29
      • 2016-05-28
      • 2016-12-03
      • 2015-10-26
      • 2021-01-28
      相关资源
      最近更新 更多