Je suis juste dans les tests de QUnit, et se sont heurtées à un problème sur ma première page: SMock/Faux Les références de service ASP.NET et les tests de QUnit
Nous utilisons Références Service d'ASP.NET pour profiter de chargement de données asynchrones sur des pages html, créant une référence à un service Web dans le même projet. Ce que fait ASP.NET en coulisses (contrôle ScriptManager) est de créer un fichier JS représentant les méthodes de service et de gérer tous les appels AJAX. En utilisant ceci, j'ai une page qui appelle une de ces méthodes dans l'événement documentQready jQuery. J'essaie maintenant de tester avec ce fichier js en utilisant QUnit, mais évitez que le fichier js appelle le service web réel et utilise un service fictif à la place. Voici ce que j'ai pour une tentative à ce jour:
main.js (fichier de code de production)
var Service;
$(document).ready(function() {
//class definition created by asp.net behind the scenes
Service = MyProject.services.DataService;
//the method that calls the service
LoadData();
});
function LoadData() {
Service.GetData(OnGetDataSuccess, OnGetDataFailure);
}
principaux-test.js (test de code QUnit, main.js est référencé dans cette page)
function SetupMockService(result) {
Service = { "GetData": function (OnSuccess, OnFailure) {
GetDataCalled = true;
OnSuccess(result);
//this is required in an asyncTest callback, I think?
start();
}, "GetDataCalled": false};
}
$(document).ready(function() {
module("LoadData");
asyncTest("LoadData should call GetData from service", function() {
SetupMockService(result);
LoadData();
equals(Service.GetDataCalled, true, "GetData has been called");
});
Ce test échoue. La méthode LoadData est appelée dans le cadre de l'événement document.ready (main.js) d'origine. Elle appelle donc toujours le service Web de production et les tests échouent car cette variable GetDataCalled n'est jamais définie (ou définie en production). Est-ce que je fais le mauvais asyncTest? L'autre façon que je peux voir ce travail est si je peux substituer l'événement main.js document.ready, mais je ne suis pas tout à fait sûr de savoir si c'est mon premier jour avec QUnit, donc je pourrais très bien l'être.
comment faire ça. Je ne veux pas non plus ajouter des vérifications "testEnvironment == true" à mon code main.js de production.