我们在文件“ mediator.js”中有一个即时函数,该函数向全局名称空间添加了“ mediator”对象。这个“中介”是我们唯一的全局对象。

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

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

那我该怎么做呢?


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


我们还考虑放弃立即模式,并具有构造函数来创建Mediator对象。这太可惜了,因为在生产代码中,我们只需要创建一次中介器,并且不想让构造函数挂在污染全局名称空间的周围。

当然,在测试即时/自介入/自执行功能时,其他人肯定会遇到此问题。那么什么是“最佳实践”?

最佳答案

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

就像是:

// mediator.js

function createMediator(){ ... }

window.mediator = createMediator();



// In unit test

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

07-24 17:38