我们正在开发一个有角度的2应用程序 . 对于单元测试,我们使用Jasmine作为我们的框架 . 我正在尝试为此设置编写我的第一个单元测试 . 我们有一个组件,它使用$ .ajax调用调用Web服务并接收JSON数据 . 代码如下 -
$.ajax({ url:(myurl),
dataType: 'json',
success:(returnedData) => {return myData;},
error:(returnedData) => {<log error>;
return}});
返回的数据格式如下 -
{
"MyClass": {
"searchFilter": "test",
"additionalIdeas": "moretest",
"results": [
["resA", "result A"],
["resB", "result B"],
["resC", "result C"]
]
},
"DataFormat": 1
};
在我的单元测试中,我使用testComponentBuilder注入组件和服务,然后尝试调用该方法,该方法又调用服务来填充我的数据 .
我怎么能在这里模拟json数据?我试着看Jasmine-Ajax,但在注入和测试构建器之间迷路了 .
2 回答
通常,单元测试不应该尝试调用外部源 . 我建议你启动一个 Spy ,它不允许调用出去并声明它与调用你的代码片段的参数一起被调用,你甚至可以模拟一个响应 .
至于嘲笑JSON,这里的问题是什么?只需创建一个本地模拟资源作为JSON对象,它与ajax调用返回的对象类似或相同 .
具体来说,您为方法名称创建一个 Spy ,该方法名称用于调用ajax,并使用模拟对象存根响应 . 你甚至可以为你的jQuery ajax调用添加一个 Spy ,假设你正在使用jQuery,例如......
http://jasmine.github.io/2.0/introduction.html#section-Spies
我能够使用Deferred对象来完成它 . 代码看起来像 .