如何断言/单元测试服务器JSON响应?

时间:2010-03-24 03:01:12

标签: javascript jquery unit-testing json integration-testing

我当前的项目使用JSON作为数据交换格式。在开始集成服务之前,前端和后端团队都同意JSON结构。有时由于后端团队未通知JSON结构的变化;它打破了前端代码。

是否有任何外部库可用于比较模拟JSON(夹具)和服务器JSON响应。基本上它应该断言整个JSON对象,并且如果服务器JSON格式中存在任何违规,则应该抛出错误。

其他信息:App构建于使用REST JSON服务的JQuery上。

5 个答案:

答案 0 :(得分:6)

我会为您的JSON对象推荐一个架构。

我使用Kwalify但如果您更喜欢这种语法,也可以使用Rx

答案 1 :(得分:5)

我最近一直在使用QUnit:http://docs.jquery.com/QUnit来获取我的很多JS代码。

asyncTest http://docs.jquery.com/QUnit/asyncTest可以非常有效地用于测试JSON结构。

示例:


asyncTest("Test JSON API 1", 1, function() {
    $.getJSON("http://test.com/json", function(data) {
        equals(data.expected, "what you expected", "Found it");
    });
});

答案 2 :(得分:3)

看起来你正试图从另一端解决问题。作为前端开发人员,为什么要考虑测试后端开发人员的工作?

在服务器上生成的JSON最好使用标准方法在服务器上进行测试,即xUnit中的功能测试。如果您想将测试和文档维基集中在一起,您还可以查看FITnesse之类的验收测试框架。

如果即使在服务器上引入测试后,你也会得到无效的JSON,这是人类沟通中的一个问题,而不是在测试中。

答案 3 :(得分:0)

由于没有答案我会把我的两分钱放进去。

如果问题在于您正在处理从后端转移需求的问题,那么您需要做的就是将自己与这些更改隔离开来。在前端和后端之间放置一个抽象。

也许您可以将此抽象称为JSON数据格式交换。

因此,当GUI单元测试(希望您是TDDing Web GUI)时,您将获得JSON DIF的模拟。因此,当将后端与前端* 集成时,任何软件更改都将在抽象层实现中完成。当然,您已经根据商定的JSON结构对这些进行了测试。

OBTW,我认为服务器端团队应该负责指定要对服务器使用的协议。

*为什么这会引起我的屁股的笑话,你的脸可能是双胞胎。

答案 4 :(得分:0)

https://github.com/skyscreamer/JSONassert可能有助于消除误报,因此如果服务器返回的字段顺序发生变化,但总体响应相同,则不会触发失败。