私はこれをテストする可能性がどのように思っていた以下の機能
injectService(serviceToInject: string, methodToInvoke: string){
let service = this.$injector.get(serviceToInject);
service[methodToInvoke]();
}
を持つつのサービスがありますか?私はこれを試しました:
(function() {
'use strict';
describe.only('ServiceA tests', function() {
let ServiceA;
beforeEach(angular.mock.module('main'));
beforeEach(inject(function (_ ServiceA_, _$injector_) {
ServiceA = _ServiceA_;
$injector = _$injector_;
}));
describe.only('injectServiceAndInvoke', function() {
it('given a string serviceToInject which is a valid service name and a string methodToInvoke which is valid method name without parameters, it should inject the service and call the method',() => {
let serviceName = 'validServiceName';
let methodWithoutParams = 'method';
let injectedService = $injector.get(serviceName);
// sandboxSinon.stub(ButtonService.$injector, 'get').withArgs(serviceName).returns(stubbedService);
let methodToBeCalled = sandboxSinon.stub(injectedService, methodWithoutParams).withArgs(undefined);
sandboxSinon.stub(ServiceA, 'tokenizeState').withArgs(methodWithoutParams).returns([methodWithoutParams, undefined]);
ServiceA.injectServiceAndInvoke(serviceName, methodWithoutParams);
expect(methodToBeCalled.calledOnce).to.equal(true);
});
});
});
})();
私は正しくサービス 'validServiceName'が存在しないというエラーが発生しました。私も$ injector.getをスタブしようとしましたが、このスタブを返すものと、このサービスからメソッドを呼び出す方法を理解していません。
してください、テストからより多くのコードを提供し、その答えは、アカウントにそれを取ることができます。 – estus
テストで更新しました – geo
これは、サービスロケータと非常によく似ています。なぜあなたはこれを行う必要があり、実装をテストしているのか、フレームワークをテストしていますか? –