2015-09-07 1 views
3

Je suis moqueur quelques points finaux sur un site angulaire avec l'aide du modèle Protractor suivant:Ajouter plusieurs modules simulacres dans un essai avec « addMockModule »

// mock.js 
// adding the mock module and passing it data 
Mock.prototype.all = { 
    default: function() { 
     browser.addMockModule('httpBackendMock', mockModules.all, { 
     data: data 
     }) 
    } 
} 

// mockmodules.js 
// add dependencies to module and inject it 
exports.all = function() { 

    $httpBackend.whenGET(/user/).respond(function() { 
     return [200, data.mockData.data]; 
    });  

    $httpBackend.whenGET(/.*/).passThrough(); 
    $httpBackend.whenPOST(/.*/).passThrough(); 

    angular.module('httpBackendMock' ['ngMockE2E', 'sportsbook-app']) 
     .value('data', { 
      'mockData': arguments[0], 
      'count': 0 
     }) 
     .run(runBlock); 
     runBlock.$inject = ['$httpBackend', 'data', 'eventDataSourceManager']; 
} 

// test-spec.js 
// call mock from test 
it("Mock", function() { 

    mock.all.default(); 
}); 

Maintenant, cela fonctionne très bien, mais je veux être capable d'ajouter plus de modules en ayant plusieurs modules qui envoient tous des données différentes. Exemple:

Mock.prototype.all = { 
    default: function() { 
     browser.addMockModule('httpBackendMock', mockModules.allDefault, { 
     data: data 
     }) 
    }, 
    user: function() { 
     browser.addMockModule('user', mockModules.allUser, { 
     userData: userData 
     }) 
    } 
} 

it("Mock", function() { 

    mock.all.default(); 
    mock.all.user(); 
}); 

Ainsi, aucun des motifs ne semble fonctionner.

également au sein du serveur de sélénium, je peux voir que les noms des deux modules sont trouvés:

Executing: [execute script: angular.resumeBootstrap(arguments[0]);, [[protractorBaseModule_, httpBackendMock, user]]]) 

Au début, je pensais que la question était avec

$httpBackend.whenGET(/.*/).passThrough(); 
$httpBackend.whenPOST(/.*/).passThrough(); 

essayé d'ajouter à un module séparé et appelez-le après que tous les autres modules sont appelés, mais cela n'a pas fonctionné. Des idées?

Répondre

1

Cela fonctionne comme prévu, car vos deux modules fictifs utilisent le même identificateur de nom de module, httpBackendMock. Vous pouvez utiliser un nom unique et le dernier module ne remplacera pas les autres.

+0

Je suis désolé pour la confusion. Les objets de page allDefault et allUser ont en effet un identifiant de nom de module unique, par exemple: angular.module ('allU') et angular.module ('allD'). Edité la question principale pour refléter cela. Je n'arrive toujours pas à comprendre quel pourrait être le problème ... Je me trompais aussi sur le fait que seul le dernier simulacre fonctionnait, en réalité ils ne fonctionnent pas tous les deux (le dernier fonctionnait quand j'ai testé avec les mêmes noms de module) – zalow517