2010-03-24 5 views
6

Mon projet actuel utilise JSON comme format d'échange de données. Les équipes Front-end et Back-end s'accordent sur une structure JSON avant de commencer à intégrer un service. Parfois en raison de changements non notifiés dans la structure JSON par l'équipe back-end; il casse le code frontal.Comment faire pour affirmer/tester unitairement les serveurs Réponse JSON?

Y at-il bibliothèque externe que nous pourrions utiliser pour comparer une JSON maquette (luminaire) avec les serveurs réponse JSON. Fondamentalement, il devrait affirmer l'objet JSON entier et devrait lancer une erreur s'il y a une violation dans le format JSON des serveurs. Informations supplémentaires: L'application est basée sur JQuery et utilise les services REST JSON.

Répondre

6

Je recommanderais un schéma pour vos objets JSON.

J'utilise Kwalify mais vous pouvez aussi utiliser Rx si vous préférez cette syntaxe.

+0

Déclarer un schéma pour JSON est intéressant cependant.Voici mon idée sur l'approche des appareils; il pourrait être utilisé à la fois pour tester l'intégrité des services principaux et pourrait être utilisé pour le développement de l'interface utilisateur hors ligne ou pré-intégration. – shazmoh

+2

Ne mélangez pas ces choses. Utilisez un schéma pour vous assurer que vous comprenez tous les deux le contrat de données. Utilisez des appareils dans le backend pour faire des tests unitaires. Les mélanger vous mettra à jour trop de choses et compliquera votre vie. –

3

On dirait que vous essayez de résoudre un problème à l'autre bout. Pourquoi devriez-vous, en tant que développeur frontal, prendre la peine de tester le travail du développeur back-end?

A JSON qui est généré sur le serveur est préférable de tester sur le serveur en utilisant l'approche standard, à savoir des tests fonctionnels en xUnit. Vous pouvez également regarder des cadres de test d'acceptation comme FITnesse si vous voulez avoir des tests et de la documentation wiki tout en un.

Si même après l'introduction de tests sur le serveur, vous obtiendrez JSON invalide, il est un problème dans la communication humaine, et non pas dans les tests.

+1

Je ne suis pas d'accord. Même si le backend doit faire un meilleur travail à l'unité de test de son propre code, il y a tellement de fois qu'il serait utile de s'assurer que vous recevez le type de données que vous attendez. En étant en mesure de vérifier rapidement le JSON entrant, vous pouvez réduire considérablement votre temps de débogage en identifiant correctement le problème en tant que frontend ou backend – Hortitude

5

J'utilise QUnit: http://docs.jquery.com/QUnit récemment pour beaucoup de mon code JS.

asyncTest http://docs.jquery.com/QUnit/asyncTest pourrait être assez efficace utilisé pour tester la structure JSON.

Exemple:


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

Comme il n'y a pas de réponse je vais mettre mes deux cents dans

Si le problème est que vous avez affaire à des exigences changeantes de l'arrière-plan puis ce que vous. besoin de faire est de vous isoler de ces changements. Mettez une abstraction entre le front-end et le back-end. Vous pouvez peut-être appeler cette abstraction JSON Data Format Interchange.

Ainsi, lorsque l'unité-test GUI (espérons-vous TDDing votre interface Web), vous aurez une maquette pour le JSON DIF. Ainsi, lorsque le temps d'intégration du backend avec le frontal *, tout changement de logiciel sera effectué dans l'implémentation de la couche d'abstraction. Et bien sûr vous avez déjà des tests pour ceux basés sur la structure JSON convenue.

OBTW, Je pense que l'équipe côté serveur devrait avoir la responsabilité de spécifier le protocole à utiliser contre le serveur.

* Pourquoi cela rappelle-t-il la blague de mes fesses et de votre visage pourrait être des jumeaux.

0

https://github.com/skyscreamer/JSONassert peut être utile pour éliminer les faux positifs, de sorte que si l'ordre des champs retournés par le serveur change, mais la réponse globale est la même, cela ne déclenche pas d'échec.

Questions connexes