gpt4 book ai didi

Angular 2.1 无法设置基本提供程序,因为它已经被调用(…)

转载 作者:搜寻专家 更新时间:2023-10-30 21:15:04 24 4
gpt4 key购买 nike

我正在尝试测试包含服务的基本 Angular 2 组件。当我运行测试时,出现以下错误。组件、服务和测试都非常小,它们在浏览器中也运行良好。我不确定为了让它工作我在测试中遗漏了什么。

感谢任何帮助。

Uncaught Error: Cannot set base providers because it has already been called(…)

Uncaught Error: Error in ./TestComponent class TestComponent - inline template:0:0 caused by: No provider for Http!
Error: No provider for Http!
at NoProviderError.BaseError [as constructor] (http://localhost:9876/base/karma-shim.js:4006:34)
at NoProviderError.AbstractProviderError [as constructor] (http://localhost:9876/base/karma-shim.js:33221:16)
at new NoProviderError (http://localhost:9876/base/karma-shim.js:33252:16)
at ReflectiveInjector_._throwOrNull (http://localhost:9876/base/karma-shim.js:57969:19)
at ReflectiveInjector_._getByKeyDefault (http://localhost:9876/base/karma-shim.js:57997:25)
at ReflectiveInjector_._getByKey (http://localhost:9876/base/karma-shim.js:57960:25)
at ReflectiveInjector_.get (http://localhost:9876/base/karma-shim.js:57769:21)
at TestBed.get (http://localhost:9876/base/karma-shim.js:5778:67)
at ElementInjector.get (http://localhost:9876/base/karma-shim.js:58133:48)
at _View_TestComponent0.createInternal (TestComponent.ngfactory.js:21:68)
at _View_TestComponent0.AppView.create (http://localhost:9876/base/karma-shim.js:58492:21)
at _View_TestComponent0.DebugAppView.create (http://localhost:9876/base/karma-shim.js:58704:44)
at _View_TestComponent_Host0.createInternal (TestComponent_Host.ngfactory.js:18:14)
at _View_TestComponent_Host0.AppView.create (http://localhost:9876/base/karma-shim.js:58492:21)
at _View_TestComponent_Host0.DebugAppView.create (http://localhost:9876/base/karma-shim.js:58704:44)
at ComponentFactory.create (http://localhost:9876/base/karma-shim.js:33751:36)
at initComponent (http://localhost:9876/base/karma-shim.js:5816:53)
at ZoneDelegate.invoke (http://localhost:9876/base/karma-shim.js:48531:26)
at ProxyZoneSpec.onInvoke (http://localhost:9876/base/karma-shim.js:48195:39)
at ZoneDelegate.invoke (http://localhost:9876/base/karma-shim.js:48530:32)
at Object.onInvoke (http://localhost:9876/base/karma-shim.js:22909:37)
at ZoneDelegate.invoke (http://localhost:9876/base/karma-shim.js:48530:32)
at Zone.run (http://localhost:9876/base/karma-shim.js:48413:43)
at NgZone.run (http://localhost:9876/base/karma-shim.js:22799:62)
at TestBed.createComponent (http://localhost:9876/base/karma-shim.js:5819:62)
at Function.TestBed.createComponent (http://localhost:9876/base/karma-shim.js:5634:33)
at Object.<anonymous> (http://localhost:9876/base/karma-shim.js:63273:41)
at ZoneDelegate.invoke (http://localhost:9876/base/karma-shim.js:48531:26)
at ProxyZoneSpec.onInvoke (http://localhost:9876/base/karma-shim.js:48195:39)
at ZoneDelegate.invoke (http://localhost:9876/base/karma-shim.js:48530:32)
at Zone.run (http://localhost:9876/base/karma-shim.js:48413:43)
at Object.<anonymous> (http://localhost:9876/base/karma-shim.js:47910:34)
at ZoneQueueRunner.jasmine.QueueRunner.ZoneQueueRunner.execute (http://localhost:9876/base/karma-shim.js:47940:42)
at ZoneQueueRunner.jasmine.QueueRunner.ZoneQueueRunner.execute (http://localhost:9876/base/karma-shim.js:47940:42)
at ZoneDelegate.invokeTask (http://localhost:9876/base/karma-shim.js:48564:35)
at Zone.runTask (http://localhost:9876/base/karma-shim.js:48453:47)
at drainMicroTaskQueue (http://localhost:9876/base/karma-shim.js:48700:35)

!-- 组件

import { Component, OnInit } from '@angular/core';
import { TestService } from '../components/service/TestService';
@Component({
selector: 'my-home',
templateUrl: './home.component.html',
styleUrls: ['./home.component.scss'],
providers: [TestService]
})
export class HomeComponent implements OnInit {

constructor(private testService: TestService) {
// Do stuff
}

ngOnInit() {
console.log('Hello Home', this.testService.getUsers());
}

}

!-- 服务

import { Injectable } from '@angular/core';
import { Http } from '@angular/http';

@Injectable()
export class TestService {
constructor(public http: Http) {}

getUsers() {
return this.http.get('http://foo.bar');
}
}

!-- 测试

import { inject, TestBed } from '@angular/core/testing';

import {BaseRequestOptions, Response, ResponseOptions, Http} from '@angular/http';
import { MockBackend, MockConnection } from '@angular/http/testing';

import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing';
import {TestService} from './TestService';

TestBed.initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting());

describe('Http', () => {

beforeEach(() => {
TestBed.configureTestingModule({
providers: [
TestService,
BaseRequestOptions,
MockBackend,
{
provide: Http,
useFactory: (backend: MockBackend, defaultOptions: BaseRequestOptions) => {
return new Http(backend, defaultOptions);
},
deps: [MockBackend, BaseRequestOptions],
},
],
});
});

beforeEach(inject([MockBackend], (backend: MockBackend) => {
const baseResponse = new Response(new ResponseOptions({ body: 'got response' }));
backend.connections.subscribe((c: MockConnection) => c.mockRespond(baseResponse));
}));

it('should return response when subscribed to getUsers', inject([TestService], (testService: TestService) => {
testService.getUsers().subscribe((res: Response) => {
expect(res.text()).toBe('got response');
});
}));

});

最佳答案

我已经通过以下操作解决了这个问题:

TestBed.initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting()); 移动到 beforeAll 函数,所以它看起来像这样

describe('Http', () => {
beforeAll( ()=> {
TestBed.initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting());
});
beforeEach( () => {
TestBed.configureTestingModule({
providers : [...]
}
});
it('your tests...', inject([Provider], (provider:Provider)=>{});

关于Angular 2.1 无法设置基本提供程序,因为它已经被调用(…),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40325090/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com