2014-07-02 7 views
5

Ich versuche Protractor die addMockModule() zu verspotten einem einfachen AngularJS Modul und außer Kraft setzen, eine Variable zu verwenden.Wie angular.module ('MyModule', []) verspotten Wert() in Jasmine/Protractor

hier ist mein HTML ist:

<body ng-app="myApp"> 
    <div ng-controller="myAppController">  
     Overriden module value <b>{{myValue}}</b> 
    </div> 

    <script src="/Scripts/Lib/angular/angular.js"></script> 
    <script src="/module.js"></script> 
    <script src="/controller.js"></script> 
</body> 

hier ist mein Controller:

var myApp = angular.module("myApp", ['myModule']); 

myApp.controller("myAppController", function ($scope, myValue) { 
    $scope.myValue = myValue; 
}); 

hier ist mein Modul:

var newModule = angular.module('myModule', []); 
newModule.value('myValue', "oldValue"); 

Hier ist mein Jasmine/Protractor Code:

var mockMyModule = function() { 
     var newModule = angular.module('myModule', []); 
     newModule.value('myValue', "newMockedValue"); 
    }; 

    it('should override services via mock modules', function() { 

     ptor = protractor.getInstance(); 
     ptor.ignoreSynchronization = true; 
     browser.addMockModule('portfolioDataAccessMod', mockMyModule); 
     browser.get('http://localhost:57627/page1.html'); 

     expect(element(by.binding("myValue")).getText()).toBe("newMockedValue"); 

    }); 

Ergebnisse:

Failures:

1) End-to-End-Test in/Asset Allocation/Index sollte Dienste außer Kraft setzen via mock modules Nachricht: Erwartet 'oldValue' als 'newMockedValue'.

Was ist los?

Alle Beispiele, die ich bisher gefunden habe, sind HTTP-Aufrufe zu überschreiben, aber alles, was ich will, ist ein sehr einfaches Modul mit einer einfachen Variablen zu verspotten. Ist es möglich, in Winkelmesser zu tun?

+0

Die Idee dahinter ist, Konstanten für Live-Umgebung zu haben, und sie Test nur für Winkelmesser ändern. –

Antwort

7

Nach Juliemr in diesem Beitrag.

https://github.com/angular/protractor/issues/509

"der Code, der in der mockedModule ausgeführt wird in einem separaten Kontext aus dem Testlauf One ist im Browser, ist in den node.js läuft Prozess den Test "

Put Erklärung mockedValue innerhalbWinkelsynchronisationund ermöglichen

it('should override services via mock modules', function() { 
    ptor = protractor.getInstance(); 

    // When ignoreSynchronization is true mocking doesn't work 
    ptor.ignoreSynchronization = false; 

    browser.addMockModule('myModule', function() { 
     var module = angular.module('myModule').config(['$provide', function ($provide) { 
      $provide.constant('myValue', 'newMockedValue'); 
     }]) 
    }); 

    browser.get('http://localhost:57627/page1.html'); 
    expect(element(by.binding("myValue")).getText()).toBe("newMockedValue"); 

}); 
+0

Es ist normal, dass es nicht funktioniert. Mit ptor.ignoreSynchronization = true; Sie geben an, dass Sie keine eckige Seite testen. Es besteht also keine Notwendigkeit zu verspotten. – Mischa

+0

Mehr über ignoreSynchronization-Attribut hier: http://stackoverflow.com/questions/28808463/what-is-browser-ignoresynchronization-in-protractor –

Verwandte Themen