我试图在我的一个
angularjs模块中模拟一个工厂.完整的angularjs应用程序是
angular.module('administration',['administrationServices'])
依赖:
var module = angular.module('administrationServices')
包含工厂服务:
module.factory('Example',[function(){ return{ list:function(){ return ['This is real'] } } }])
这是我试图在量角器e2e测试中覆盖的服务.实际测试看起来像这样:
describe('Example page',function(){ beforeEach(function() { var mock = function(){ // get the module and provide the mock var module = angular.module('administrationServices').config(['$provide',function($provide){ $provide.factory('Example',[function(){ return { list: function(){ return ['This is a Mock Test'] } } }]) }]) } // override the mock service browser.addMockModule('administrationServices',mock) }) it('should go to the page and see mock text',function() { // code that goes to page and checks if the service works // ... }) })
当我$proractor conf.js时,我遇到了这个问题,我得到了错误:
Error while running module script administrationServices: [$injector:nomod] http://errors.angularjs.org/1.3.4/$injector/nomod?p0=administrationServices
这是我很困惑的地方.关于量角器的addMockModule的每篇博文都使用了类似的语法.在administrationServices中还有其他工厂服务,这些服务似乎被覆盖,因为由于这些服务(用户和组服务)不起作用,应用程序无法打开页面.
无论如何,如果有人看到这个并且可以帮助我指导正确的方向,那将有所帮助;我是模拟服务,量角器和e2e测试的新手.
解决方法
我认为问题是你的mock函数没有返回任何东西.它不在功能范围之外共享新模块.
var mock = function(){ // get the module and provide the mock return angular.module('administrationServices').config(['$provide',function($provide){ $provide.factory('Example',[function(){ return { list: function(){ return ['This is a Mock Test']; } } }]) }]) }; // override the mock service browser.addMockModule('administrationServices',mock)
只是让它返回新模块,它应该没问题.