我正在尝试测试指令,我看了几个例子,但我找不到与我相似的例子。我目前的问题是我有一个控制器附加到我的指令,Angular似乎找不到我的自定义服务,这些服务被注入控制器,但它可以找到它自己的服务。
指令
export class MyDirective implements ng.IDirective {
constructor(private clientAppState: IClientAppState) { }
static instance(clientAppState: IClientAppState): ng.IDirective {
return new LocationAccessCodeDirective(clientAppState);
}
restrict = 'E';
templateUrl = 'myDirectiveDirectory.html';
controller = MyDirectiveController;
controllerAs = 'myDirectiveController';
scope: {};
}
angular
.module('myDirective')
.directive('myDirectiveName', MyDirective.instance);
MyDirectiveController
export class MyDirectiveController implements ILocationAccessCodeScope {
constructor(protected $analytics: angulartics.IAnalyticsService,
public errorMessageService: IErrorMessageService //Custom Service
)
{
//Initializations
}
依赖文件
MyDirectiveController.$inject = [
'$analytics',
'ErrorMessageService',
];
规格
describe("myDirective", () => {
var scope;
beforeEach(() => {
angular.mock.module(
'DirectiveModule',
'ServiceModule',
'ng',
'myDirectiveDirectory.html'
);
mockErrorMessageService = sinon.stub(new MockErrorMessageService());
angular.mock.module(($provide): void => {
$provide.value('ErrorMessageService', mockErrorMessageService);
});
inject(($compile, $rootScope) => {
scope = $rootScope.$new();
var element = angular.element("<directive-tag></directive-tag>");
var comEl = $compile(element)(scope);
$rootScope.$digest();
console.log(element[0].outerHTML);
//Note that if I remove the (scope)
//...from $compile(element)(scope)
//my directive is printed out
});
});
describe('first directive test', () => {
it('first it', () => {
console.log("it");
});
});
});
错误消息
Error: [$injector:unpr] Unknown provider: ErrorMessageServiceProvider <- errorMessageService
出于某种原因,Angular会将自己的Google Analytics服务注入我的控制器,但它无法找到我自己的服务,而且我似乎无法找出原因,而且我很确定我已经包含了所有相关内容文件到我的 Karma.config.js 文件
另请注意,这可能无关紧要,但我尝试将随机自定义服务注入 beforeEach 块并得到相同的错误,但是当使用内联注释注入它时,它找到了服务,我&# 39;我不确定为什么会这样,因为我没有缩小我的代码,正如你从依赖列表中看到的那样,它也是作为列表注入的。
答案 0 :(得分:0)
问题是我在我的控制器文件之后包含了我的依赖文件,但出于某种原因,当我首先包含我的依赖文件时它开始工作。