我有一个 session.factory.js
工厂:
(function() {
'use strict';
angular
.module('app')
.factory('Session', Session);
function Session() {
var sessionId;
return {
create: create,
destroy: destroy,
isAuthenticated: isAuthenticated
};
function create(id) {
sessionId = id
}
function destroy() {
sessionId = null;
}
function isAuthenticated() {
return !!sessionId;
}
}
})();
我想测试一下,所以我制作了一个session.factory.spec.js
:
describe('Session', function() {
var Session;
beforeEach(function(){
module('app');
inject(function(_Session_){
Session = _Session_;
});
});
});
但是 Session
由于某种原因 undefined
。我缺少什么?
最佳答案
你只需要像这样加载你的模块:
describe('Session', function() {
var Session;
beforeEach(module('app')); //added
beforeEach(inject(function(_Session_){
Session = _Session_;
});
});
module('app')
返回一个函数,然后在每个函数之前调用该函数。按照您在 OP 中的方式,该函数是通过从未调用创建的。
inject
是一样的。它应该直接位于 beforeEach
中。
编辑:
上面的代码是通常的做法,但事实证明你也可以在OP 的工作方式。
在 building a plunker for this question 之后,我可以看到问题不在测试的定义中。这实际上是模块定义方式的问题。
这一行:
angular
.module('app')
.factory('Session', Session);
应该是这样的:
angular
.module('app', [])
.factory('Session', Session);
[]
很重要,因为它表示这是根 模块(或应用程序)。否则,该模块将被视为依赖模块,无法正确创建。
关于javascript - AngularJS:如何测试工厂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30378573/