我目前正在Angular应用中的一条路线上设置一个resolve属性。我正在使用ngRoute。另外,我将一个名为Session
的服务注入到我的解析函数中。
我的路线如下:
$routeProvider.when('/projects', {
templateUrl: 'views/projects/index.html',
controller: 'ProjectsCtrl',
resolve: {
beforeAction: function (Session) { // <-- here's the injection
// this logs an object in the browser,
// but in my test it logs as undefined
console.log('Session', Session);
}
}
});
在我的浏览器中,这会按预期将Session, Object {}
记录到我的控制台。
但是,当我运行测试时,同一行会将Session, undefined
打印到我的控制台。
我的测试看起来像这样:
beforeEach(module('visibilityApp'));
var route;
describe('/projects', function () {
beforeEach(inject(function ($route) {
route = $route;
}));
it('checks if the user is logged in', function () {
// Here I just invoke the function that's assigned to the
// route's resolve property, but Session then seems
// to be undefined.
route.routes['/projects'].resolve.beforeAction();
// then more of the test...
});
});
我已经发现我注入resolve函数并不重要。如果我注入$location
并记录它,它就是相同的spiel:它在我的浏览器中有效,但在我作为测试运行它时是未定义的。
我对Jasmine和Karma的测试。该应用程序是由Yeoman生成的。
为什么在我的测试中未定义解析依赖项?我的测试需要一些额外的设置吗?
答案 0 :(得分:0)
我想这就是其中之一&#34;我需要离开它一小时然后再回到它上面#34;的情况。事实证明,如果我手动调用resolve函数,我必须自己注入Session服务。
所以而不是
route.routes['/projects'].resolve.beforeAction();
我需要传递会话
route.routes['/projects'].resolve.beforeAction(Session);
否则,Session参数显然是未定义的。为此,我将Session服务注入我的测试中:
beforeEach(module('visibilityApp'));
var route,
Session;
describe('/projects', function () {
beforeEach(inject(function ($route, _Session_) {
route = $route;
Session = _Session_;
}));
it('checks if the user is logged in', function () {
route.routes['/projects'].resolve.beforeAction(Session);
// then more of the test...
});
});