以下是我的模块和单元测试设置。当我尝试设置$ state
时,$injector.get("$state")
会抛出始终有趣的未知提供商:$ stateProvider< - $ state 错误,我不明白为什么。
angular.module("my-module", [
//Third Party
"ui.bootstrap",
"ui.router",
"toaster",
"angular-loading-bar",
"ngAnimate",
"ngSanitize",
"ApplicationInsightsModule",
"pascalprecht.translate"
]);
describe("something descriptive and helpful", (): void => {
// a bunch of other service variables....
var $state: any;
// I've tried with and without this line
beforeEach(() => angular.module("ui.router"));
beforeEach(() => {
angular.module("my-module");
inject(($injector: ng.auto.IInjectorService): void => {
// a bunch of other service variable assignments
$state = $injector.get("$state");
});
});
答案 0 :(得分:2)
您需要致电
angular.mock.module("my-module")
加载模块。
答案 1 :(得分:1)
模拟$stateProvider
和$state
的目的是存根第三方服务并仅隔离自己的代码,从而减少移动部件的数量。
基本上是
beforeEach(module("my-module", ($provide) => {
$provide.factory('$state', ($q) => ({
go: jasmine.createSpy().andCallFake(() => $q.resolve());
}));
}));
it('...', inject(($state, ...) => {
...
expect($state.go).toHaveBeenCalledWith('stateName');
});
此时ui.router
模块不应该加载到测试模块中,因为它需要额外的存根。
另见this answer有关如何测试$stateProvider
路由配置的说明。