如何使用Jasmine / Chutzpah / JsTestDriver对JavaScript立即函数进行单元测试

时间:2012-03-27 08:28:23

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

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

现在我们为'mediator'对象提供了许多不同的单元测试。我们希望每个测试都是孤立运行的 - 换句话说,每个测试都需要通过调用immediate函数来创建一个新的干净中介对象。

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

那我该怎么做呢?

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

我们也在考虑放弃直接模式,并使用构造函数来创建Mediator对象。这将是一种耻辱,因为在生产代码中我们只需要创建一次中介,并且不希望构造函数挂起来污染全局命名空间。

当测试立即/自我攻击/自动执行功能时,其他人肯定遇到过这个问题。那么什么是“最佳实践”?

1 个答案:

答案 0 :(得分:2)

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

类似的东西:

// mediator.js

function createMediator(){ ... }

window.mediator = createMediator();



// In unit test

beforeEach(function () {
  window.mediator = createMediator();
});