【发布时间】:2016-06-25 20:46:24
【问题描述】:
我是 TDD 新手,我正在尝试编写使用第三方库(跨平台移动开发)的可测试代码。我想进行测试以仅检查我们的业务逻辑。不用担心它们的实施。
他们的更多库仅在本机包装器中公开。由于使用 js 作为开发语言,我想使用 jasmine 进行测试并运行测试以仅在浏览器中检查我的业务逻辑。
以下是我想在测试时忽略/模拟的方法模式。
com.companyname.net.checkInternetAvailable(url)
com.companyname.store.getValue(key)
com.companyname.someother.name(whateverObj, callback) etc.,
目前,我创建了一个新的mocks.js 文件,我只是在其中写了
var com = {
"net":{},
"store":{},
"someother":{}
}
com.net.checkInternetAvailable = function(url){
//TODO: fix this!
return true;
}
我对代码中的所有方法都执行相同的操作。我尝试使用 Jasmine SpyOn(com.net, "checkInternetAvailable").and.returnValue(true) 而不是定义所有方法。这种方法的问题是我必须定义所有使用SpyOn 的方法。
有没有更简单的方法来做到这一点?推荐的方法是什么?
【问题讨论】:
-
嗨@palaniraja。这些第三方模块是如何包含的?你的代码中有整个对象吗?
-
是的@Tokimon 当我在本机包装器中运行它们时,我拥有整个对象。我相信他们在后台运行 webkit 引擎来执行代码。但我的要求。只是用我的存根方法模拟所有调用,以检查方法调用的顺序并验证所有预期的方法都被调用了。
-
嗨@palaniraja,通常我会循环对象和子对象上的所有属性,并用你的
function() { return true; }(或sinon 存根)存根每个属性,但这只有在你不这样做时才有效关心哪一个被调用,只是希望它们都返回 true。如果您需要检查是否调用了特定方法,那么您需要在测试中指定您希望调用哪些方法。
标签: javascript unit-testing mocking jasmine tdd