2014-07-02 11 views
5

Próbuję użyć addMockModule kątomierza(), aby drwić moduł proste angularjs i zastąpić zmienną.Jak drwić angular.module ('mymodule', []) wartość() w Jasmine/Kątomierz

tu jest mój HTML:

<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> 

Oto moja Kontroler:

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

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

Oto moja Moduł:

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

Oto mój kod Jasmine/kątomierz:

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

    }); 

Wyniki:

Awarie:

1) End-to-end test/AssetAllocation/Index należy nadpisać usługi za pomocą modułów próbnych Wiadomość: Oczekiwana wartość "oldValue" do "newMockedValue".

Co jest nie tak?

Wszystkie dotychczas znalezione próbki zastępują połączenia HTTP, ale chcę tylko pozorować bardzo prosty moduł z prostą zmienną. Czy można to zrobić w Kątomierzu?

+0

Ideą jest to, aby mieć stałe dla żywego środowiska i zmieniać je tylko dla testu kątomierz. –

Odpowiedz

7

Według Juliemr w tym poście.

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

"kod, który jest prowadzony w mockedModule prowadzony jest w osobnym kontekście z testu Jednym z nich jest w przeglądarce, jeden jest w node.js proces uruchomiony test "

deklarację put mockedValue wewnątrz it() i umożliwienia kątowego synchronizację

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

To normalne, że nie działa. Z ptor.ignoreSynchronization = true; określasz, że nie testujesz kątowej strony. Więc nie ma potrzeby kpić. – Mischa

+0

Więcej o atrybucie ignoreSynchronization tutaj: http://stackoverflow.com/questions/28808463/what-is-browser-ignoresynchronization-in-protractor –