2016-04-21 107 views
0
I have a factory service as below 

FamilyService.js角JS单元测试使用茉莉

(函数(){ '使用严格';

angular.module('app') 
.factory('ABC', FamilyService); 

FamilyService.$inject = ['DEF']; 
function FamilyService(DEF) { 


function returnTrue() { 
    var a="true"; 

}  

} 

}());

I want to call returnTrue method in My test case 

**TestFamilyService.js** 

描述( '测试my_controller.my_function',函数(){ 变种mockedFactory,$ rootScope,$控制器;

beforeEach(module('app', function($provide) { 
    mockedFactory = { 
     save: jasmine.createSpy() 
    }; 

    $provide.value('ABC', mockedFactory); 
    })); 




    it('should call the save function', function() { 

    expect(mockedFactory.returnTrue()).toHaveBeenCalled(); 
    }); 
}); 



    **specrunner.html** 


<!DOCTYPE html> 
    <html> 
    <head> 
     <meta charset="utf-8"> 
     <title>Jasmine Spec Runner v2.4.1</title> 

     <link rel="shortcut icon" type="image/png" href="lib/jasmine-2.4.1/jasmine_favicon.png"> 
     <link rel="stylesheet" href="lib/jasmine-2.4.1/jasmine.css"> 

     <script src="lib/jasmine-2.4.1/jasmine.js"></script> 
     <script src="lib/jasmine-2.4.1/jasmine-html.js"></script> 
     <script src="lib/jasmine-2.4.1/boot.js"></script> 
     <script src="lib/jasmine-2.4.1/angular.js"></script> 
     <script src="lib/jasmine-2.4.1/angular-mocks.js"></script> 


     <!-- include source files here... --> 
     <script src="src/Player.js"></script> 
     <script src="src/webapp/Mock.js"></script> 
     <script src="src/webapp/FamilyService.js"></script> 




     <!-- include spec files here... --> 

     <script src="spec/TestFamilyService.js"></script> 

    </head> 

    <body> 
    </body> 
    </html> 

当我在浏览器中运行specrunner.html它显示

错误:无模块:app

TypeError:无法获取属性'returnTrue'的值:对象为空或未定义

请问我最近怎么了?

+0

其中js文件是否初始化应用程序模块? –

+0

FamilyService.js – user2918673

回答

1

在FamilyService.js

angular.module('app').factory('ABC', FamilyService); 

要创建的现有工厂模块app,但如果模块不存在你需要写

angular.module('app',[]).factory('ABC', FamilyService); 

在你的情况只是创建一个新文件,其中角模块被创建

angular.module('app',[]); 

UPDATE

就包括你的模块依赖于HTML

<script src="lib/angular-sanititze/angular-sanitize.js"></script> 

如果你想嘲笑这些模块,你可以这样做

beforeEach(function() { 
     angular.module('second',[]); 
} 

但是,如果您使用第三方库的某些方法,则需要t ö嘲笑这些方法。

+0

你想让我添加angular.module('app',[]);行到一个单独的文件 – user2918673

+0

当我问你,你的模块声明在哪里,你回答说它在FamilyService.js中,但那不是模块声明。它是模块的用法。您需要首先定义模块。在一般情况下,您可以在单独的文件中执行此操作。请参阅https://github.com/johnpapa/angular-styleguide/blob/master/a1/README.md例如 –

+0

是的,它是在一个单独的文件中定义的......在包含模块声明的同时添加了js后,该错误得到了解决但它取决于5个模块......模块名称被抛出,因为现在没有找到...示例应用程序模块需要ngSanitize,ui-bootstrap等 – user2918673