我已经删除了应用程序,所以只有重要的事情在这里。我创建了一个名为databaseSrvc的服务,并尝试注入Jasmine单元测试。我已经检查了很多次,看它是否是拼写错误,如error page suggests,所以我很确定它不是。
.
├── 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
angular.module("firebaseTestApp", [])
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;
});
评论的部分和后面的部分都不起作用。它总是记录“未定义”,并给出了上面提到的错误。
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();
}));
});
<!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>
答案 0 :(得分:0)
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)....
})
})
})
您需要在期望可以访问的范围内公开注入的服务。