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

Javascript 如何断言/单元测试服务器JSON响应?,javascript,jquery,unit-testing,json,integration-testing,Javascript,Jquery,Unit Testing,Json,Integration Testing,我当前的项目使用JSON作为数据交换格式。在开始集成服务之前,前端和后端团队都同意JSON结构。有时由于后端团队未通知JSON结构的更改;它破坏了前端代码 是否有任何外部库可用于将模拟JSON(fixture)与服务器JSON响应进行比较。基本上,它应该断言整个JSON对象,如果服务器JSON格式中存在任何冲突,它应该抛出一个错误 附加信息:应用程序是基于使用RESTJSON服务的JQuery构建的。我建议为您的JSON对象提供一个模式 我使用,但如果您更喜欢这种语法,也可以使用。看起来您正试图

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

是否有任何外部库可用于将模拟JSON(fixture)与服务器JSON响应进行比较。基本上,它应该断言整个JSON对象,如果服务器JSON格式中存在任何冲突,它应该抛出一个错误


附加信息:应用程序是基于使用RESTJSON服务的JQuery构建的。

我建议为您的JSON对象提供一个模式


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

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

在服务器上生成的JSON最好使用标准方法在服务器上测试,即在xUnit中进行功能测试。您还可以查看验收测试框架,比如是否希望将测试和文档集于一体

即使在服务器上引入了测试,您也会得到无效的JSON,这是人类交流中的问题,而不是测试中的问题。

我最近一直在使用QUnit:来编写我的许多JS代码

asyncTest可以非常有效地用于测试JSON结构

例如:


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

既然没有人回答,我就把我的两分钱放进去

如果问题是您正在处理来自后端的不断变化的需求,那么您需要做的是将自己与这些变化隔离开来。在前端和后端之间进行抽象

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

因此,当GUI单元测试时(希望您正在TDD您的Web GUI),您将有一个JSON DIF的模拟。因此,当集成后端和前端时*,任何软件更改都将在抽象层实现中完成。当然,您已经有了基于约定JSON结构的测试

当然,我认为服务器端团队应该负责指定针对服务器使用的协议


*为什么这会让人想起“我的屁股和你的脸可能是双胞胎”的笑话。

可能有助于消除误报,这样,如果服务器返回的字段顺序发生变化,但总体响应相同,就不会触发故障。

为JSON声明模式很有趣。以下是我对固定装置方法的看法;它既可以用于测试后端服务的完整性,也可以用于离线或预集成UI开发。不要混淆这些东西。使用模式确保双方都理解数据契约。在后端使用fixture进行单元测试。混用它们会让你更新太多的东西,会让你的生活变得复杂。我不同意。尽管后端在单元测试他们自己的代码时应该做得更好,但是有很多次,这将有助于确保您接收到您期望的数据类型。通过能够快速地双重检查传入的JSON,您可以通过正确地将问题识别为前端或后端来显著减少调试时间