2010-03-24 3 views
6

현재 프로젝트는 JSON을 데이터 교환 형식으로 사용합니다. 프론트 엔드와 백 엔드 팀 모두 서비스 통합을 시작하기 전에 JSON 구조에 동의합니다. 백엔드 팀에 의한 JSON 구조의 변경되지 않은 변경으로 인해 때때로; 프론트 엔드 코드가 깨집니다.JSON 응답 서버를 어설 션/유닛 테스트하는 방법은 무엇입니까?

모의 JSON (조명기)을 서버 JSON 응답과 비교하는 데 사용할 수있는 외부 라이브러리가 있습니까? 기본적으로 전체 JSON 객체를 어설 션해야하며 서버 JSON 형식의 위반이 있으면 오류가 발생합니다.

추가 정보 : 앱은 REST JSON 서비스를 사용하는 JQuery를 기반으로 작성됩니다.

답변

6

JSON 개체에 스키마를 사용하는 것이 좋습니다.

나는 Kwalify을 사용하지만 그 구문이 더 마음에 들면 Rx을 사용할 수도 있습니다.

+0

JSON에 대한 스키마 선언은 흥미 롭습니다.조명기 접근법에 대한 제 아이디어는 다음과 같습니다. 오프라인 또는 사전 통합 UI 개발에 사용될 수있을뿐 아니라 백엔드 서비스의 무결성을 테스트하는데도 사용할 수 있습니다. – shazmoh

+2

그런 것들을 섞지 마십시오. 스키마를 사용하여 둘 다 데이터 계약을 이해하는지 확인하십시오. 백엔드의 조명기를 사용하여 단위 테스트를 수행하십시오. 그들을 혼합하면 너무 많은 것들을 업데이 트해야하며, 당신의 인생을 복잡하게합니다. –

3

다른 끝에서 문제를 해결하려는 것 같습니다. 왜 프론트 엔드 개발자로서 백엔드 개발자의 작업을 테스트해야합니까?

서버에서 생성 된 JSON은 xUnit의 표준 테스트 즉 기능 테스트를 사용하여 서버에서 테스트하는 것이 좋습니다. 테스트와 문서 위키를 모두 가지고 싶다면 FITnesse과 같은 수용 테스트 프레임 워크를 볼 수도 있습니다.

서버에 테스트를 도입 한 후에도 유효하지 않은 JSON이 발생하는 경우 테스트가 아닌 사람의 의사 소통에 문제가있는 것입니다.

+1

나는 동의하지 않는다. 백엔드가 자신의 코드를 테스트하는 단위에서 더 나은 일을 수행 할지라도 예상되는 데이터 유형을 확실히받는 데 도움이 될 수있는 많은 시간이 있습니다. 들어오는 JSON을 신속하게 두 번 확인함으로써 문제를 프론트 엔드 또는 백엔드로 올바르게 식별하여 디버깅 시간을 크게 줄일 수 있습니다 – Hortitude

5

최근 내 JS 코드를 많이 사용하여 QUnit : http://docs.jquery.com/QUnit을 사용하고 있습니다.

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"); 
    }); 
}); 
0

아무 대답도 내가 내 두 센트를 넣지 것이다

을 문제가 그런 다음 백 엔드에서 이동 요구 사항을 다루고 있다는 점이다 경우가 있기 때문에 무엇을. 그 변화로부터 자신을 격리시키는 것이 필요합니다. 프론트 엔드와 백엔드 사이에 추상화를하십시오.

이 추상화는 JSON 데이터 형식 교환이라고 부를 수 있습니다.

그래서 GUI 단위 테스트 (잘하면 웹 GUI를 TDDing)하면 JSON DIF에 대한 모의가 있습니다. 따라서 백 엔드를 프런트 엔드 *과 통합 할 때 모든 소프트웨어 변경 사항은 추상화 계층 구현에서 수행됩니다. 물론 합의 된 JSON 구조를 기반으로하는 테스트가 이미 있습니다.

OBTW, 나는 서버 측 팀이 서버에 대해 사용할 프로토콜을 지정해야한다고 생각합니다.

* 왜 내 엉덩이의 농담을 상기 시키며 얼굴은 쌍둥이가 될 수 있습니다.

0

https://github.com/skyscreamer/JSONassert은 가양 성을 제거하는 데 유용 할 수 있으므로 서버가 반환 한 필드 순서가 변경되지만 전체 응답이 동일하면 오류가 발생하지 않습니다.

관련 문제