使用Jasmine在AngularJS中测试服务时,未知提供商

Unknown provider when testing service in AngularJS with Jasmine

本文关键字:未知 提供商 服务 测试 Jasmine AngularJS 使用      更新时间:2023-09-26

我已经精简了应用程序,所以只有重要的东西在这里。我创建了一个名为databaseSrvc的服务,并尝试在Jasmine单元测试中注入。正如错误页面所示,我已经检查了很多次,看看这是否是拼写错误,所以我很确定不是。

项目结构

. ├── app │   ├── app.js │   └── services │   ├── database.service.js │   └── database.specs.js ├── lib │   └── jasmine │   ├── jasmine-standalone-2.5.2.zip │   ├── lib │   ├── MIT.LICENSE │   ├── spec │   ├── SpecRunner.html │   └── src └── specRunner.html

app.js

angular.module("firebaseTestApp", [])

database.service.js

angular.module("firebaseTestApp")                                                             
    .factory("databaseSrvc", function($firebaseObject) {                                      
        var databaseSrvc = {};                                                                
        databaseSrvc.ref = firebase.database.ref();                                           
        databaseSrvc.echo = function(text) {                                                  
            console.log(test);                                                                
        }                                                                                     
        databaseSrvc.addUser = function(uid, username, email) {                               
            databaseSrvc.ref.child("users").child("uid").set({                                
                username: username,                                                           
                email: email                                                                  
            });                                                                               
        }                                                                                     
        databaseSrvc.removeUser = function(uid, username, email) {                            
            databaseSrvc.ref.child("users").child("uid").removeValue();                       
        }                                                                                     
        databaseSrvc.usernameExists = function(username) {                                    
            query = databaseSrvc.ref.child("user").orderByChild("username").equalTo(username);
            obj = $firebaseObject(query);                                                     
            return obj.$loaded().then(function() {                                            
                if (obj.$value === null) {                                                    
                    return false;                                                             
                } else {                                                                      
                    return true;                                                              
                }                                                                             
            });                                                                               
        }                                                                                     
        return databaseSrvc;                                                                  
    });

数据库.specs.js

评论的部分和后面的部分都不起作用。它总是记录"未定义",并给我上面提到的错误。

describe('databaseSrvc', function() {                              
    beforeEach(module('firebaseTestApp'));
//  var databaseSrvc;                                 
//  beforeEach(inject(function(_databaseSrvc_) {      
//      databaseSrvc = _databaseSrvc_;                
//  }));
//
//                                                      
//  it('should exist', function() {
//      console.log(databaseSrvc);                    
//      expect(databaseSrvc).toBeTruthy();            
//  });                                           
    it('should exist', inject(function(databaseSrvc) {
        console.log(databaseSrvc);                    
        expect(databaseSrvc).toBeTruthy();            
    }));                                              
});   

specRunner.html

<!DOCTYPE html>                                                                                       
<html>                                                                                                
<head>                                                                                                
  <meta charset="utf-8">                                                                              
  <title>Jasmine Spec Runner v2.5.2</title>                                                           
  <link rel="shortcut icon" type="image/png" href="lib/jasmine/lib/jasmine-2.5.2/jasmine_favicon.png">
  <link rel="stylesheet" href="lib/jasmine/lib/jasmine-2.5.2/jasmine.css">                            
  <script src="lib/jasmine/lib/jasmine-2.5.2/jasmine.js"></script>                                    
  <script src="lib/jasmine/lib/jasmine-2.5.2/jasmine-html.js"></script>                               
  <script src="lib/jasmine/lib/jasmine-2.5.2/boot.js"></script>                                       
  <!-- include source files here... -->                                                               
  <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular.min.js"></script>        
  <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular-mocks.js"></script>       
  <script src="app/app.js"></script>                                                                  
  <script src="app/services/database.service.js"></script>                                            
  <!-- include spec files here... -->                                                                 
  <script src="app/services/database.specs.js"></script>                                              
</head>                                                                                               
<body>                                                                                                
</body>                                                                                               
</html> 
describe('databaseSrvc', function() {                              
  beforeEach(module('firebaseTestApp'))
  // declaring in outer scope, will be reassigned below
  var databaseSrvc = {}
  var mockFirebaseObject = function() {
    // this looks like the mock you need based on your service code
    return {
      $loaded: function() {
        return {
          then: function(cb) { cb() }
        }
      }
    }
  }
  // provide your mock object as the $firebaseObject
  beforeEach(module(function($provide) {
    $provide.value('$firebaseObject', mockFirebaseObject)
  }))
  // inject the real databaseSrvc factory and reassign it
  // to the variable in your outer scope, so that you can
  // use it in the rest of the specs
  beforeEach(inject(function(_databaseSrvc_) {
    databaseSrvc = _databaseSrvc_
  }))
  describe('expectation', function() {
    it('should do something', function() {
      expect(databaseSrvc)....
    })
  })
})

您需要在期望可以访问的范围内公开注入的服务。