[英]How to mock angular.module('myModule', []).value() in Jasmine/Protractor
我正在嘗試使用Protractor的addMockModule()來模擬一個簡單的AngularJS模塊並覆蓋一個變量:
這是我的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>
這是我的控制器:
var myApp = angular.module("myApp", ['myModule']);
myApp.controller("myAppController", function ($scope, myValue) {
$scope.myValue = myValue;
});
這是我的模塊:
var newModule = angular.module('myModule', []);
newModule.value('myValue', "oldValue");
這是我的Jasmine / Protractor代碼:
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");
});
結果:
失敗:
1)/ AssetAllocation / Index中的端到端測試應通過模擬模塊覆蓋服務消息:預期'oldValue'為'newMockedValue'。
怎么了 ?
到目前為止我找到的所有示例都是覆蓋HTTP調用,但我想要的只是用一個簡單的變量來模擬一個非常簡單的模塊。 在Protractor中可以做到嗎?
根據Juliemr在這篇文章中的說法:
https://github.com/angular/protractor/issues/509
“在mockedModule中運行的代碼在與測試不同的上下文中運行。一個在瀏覽器中,一個在node.js進程中運行測試”
將mockedValue
聲明放在it()
並啟用角度同步
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");
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.