Angularjs 如何在Jasmine/量角器中模拟angular.module(';myModule';,[]).value()
我尝试使用Gragrator的addMockModule()模拟一个简单的AngularJS模块并重写一个变量: 这是我的HTML:Angularjs 如何在Jasmine/量角器中模拟angular.module(';myModule';,[]).value(),angularjs,mocking,jasmine,protractor,angularjs-e2e,Angularjs,Mocking,Jasmine,Protractor,Angularjs E2e,我尝试使用Gragrator的addMockModule()模拟一个简单的AngularJS模块并重写一个变量: 这是我的HTML: <body ng-app="myApp"> <div ng-controller="myAppController"> Overriden module value <b>{{myValue}}</b> </div> <script src="/S
<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 newModule = angular.module('myModule', []);
newModule.value('myValue', "oldValue");
这是我的Jasmine/量角器代码:
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) 应覆盖/AssetLocation/Index中的端到端测试
通过模拟模块提供的服务消息:
“oldValue”应为“newMockedValue”
怎么了
到目前为止,我找到的所有示例都是覆盖HTTP调用,但我只想用一个简单变量模拟一个非常简单的模块。可以用量角器测量吗?根据Juliemr在这篇文章中的说法: “在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");
});
这背后的想法是为活动环境设置常量,并仅为量角器测试而更改它们。它不起作用是正常的。使用ptor.ignoreSynchronization=true;您正在指定不测试角度页面。因此无需模拟。有关ignoreSynchronization属性的详细信息,请参见:
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");
});