1

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

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

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

那么我该怎么做呢?

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

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

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

4

1 回答 1

2

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

就像是:

// mediator.js

function createMediator(){ ... }

window.mediator = createMediator();



// In unit test

beforeEach(function () {
  window.mediator = createMediator();
});
于 2012-03-28T16:07:37.630 回答