我正在编写一些JavaScript模块,用于在浏览器(客户端,而不是服务器端)中运行。该模块使用Google Maps JavaScript API。如何在使用Google Maps for JS的代码上编写单元测试
我想通过单元测试来覆盖我的代码。我也希望我的测试是孤立的。我发现了severalvcr-like JSlibraries用于记录和嘲讽Google Maps Api正在生成的HTTP请求。但他们都是Node.JS(因为PhantomJS doesn't support using fs
module)。此外,Node.JS比PhantomJS拥有更丰富和可读的回溯。
所以我想知道如何将Google Maps Javascript API包括到我的测试中,并使用基于Node.JS的测试运行器以及如何为我的代码编写测试?
P.S.我不坚持某个JS单元测试库。它可以是Jasmine,QUnit或其他。
P.P.S它不一定是Node.JS亚军。如果还有其他选择,那完全没问题!
P.P.P.S.我的目标是为了避免以下的事情:
- ,以避免在测试中
- 互联网连接和相应的延迟依赖,避免了因改变在谷歌服务器的一些GEO数据的测试失败。例如:如果我使用指示,我真的不在乎它是2000米还是2001米,我只是想知道,我从Google获得了一些适当的数据并对它进行了一些计算。
P.P.P.P.S.感谢@MichaelGeary answer我们知道Google仅保存其API的3个版本。但我不是只关注谷歌地图,我选择它在这个问题,因为它的流行/我有同样的问题适用于任何其他地图api,如Yandex.Maps,,Bing等。他们大多数不删除旧的API,所以我可以修复版本并依靠不更改内部API和HTTP请求。
另外我想避免模拟地狱,因为我的代码非常复杂,并且使用了大量不同类型的地理对象。因此,嘲笑所有这些并且支持该代码并不容易。它看起来像无法忍受的事情。
我的想法是在一段时间内修复API的版本(在Google案例中不长的时间),并依赖于内部HTTP请求格式的持久性。并不时删除所有记录的数据,以确保在现实世界中一切仍然正常。
我想让自己成为一个能控制我什么时候修复我的测试的人。我不想让Google在随机时间随时打破我的测试。
你肯定*不想*做的一件事就是使用一个库来记录和重放JavaScript Maps API使用的HTTP请求。这些请求网址和回复没有记录,对于Google Maps API代码是私有的,并且可能随时更改。您编写的任何测试应仅基于记录的API,否则当Google更改API内部时,您会发现测试失败。 –
@MichaelGeary,我的目标是避免几件事情:1)避免依赖互联网连接和相应的延迟2)避免因为更改Google服务器上的某些GEO数据而导致测试失败。例如:如果我使用指示,我真的不在乎它是2000米还是2001米,我只是想知道,我从Google获得了一些适当的数据并对它进行了一些计算。所以我不想在生产或测试中重放HTTP请求。我只是想模拟所有的HTTP请求来隔离我的测试。 – petRUShka
这听起来更像我的功能测试。 Phantomjs本身并没有API,但[Casper.js](http://casperjs.org/)会很好。 –