gpt4 book ai didi

Angular 2 单元测试 beforeEachProvider 不注入(inject)服务

转载 作者:太空狗 更新时间:2023-10-29 17:52:55 26 4
gpt4 key购买 nike

我正在尝试在 Angular 2 中测试我的组件,但当组件的服务不在其提供者内时出现问题。

import {Component} from 'angular2/core';
import {ServiceName} from '../../services/ServiceName';

@Component({
selector: 'component-name',
template: `
<div></div>
`
})

export class ComponentName {
constructor(private ServiceName: ServiceName) {
}
}

这是我的测试:

import {ComponentName} from '<path>';
import {ServiceName} from '<path>';

import {
iit,
it,
ddescribe,
describe,
expect,
inject,
injectAsync,
TestComponentBuilder,
beforeEachProviders,
fakeAsync,
tick,
setBaseTestProviders
} from 'angular2/testing';

beforeEachProviders(() => [
ServiceName
]);

import {
TEST_BROWSER_PLATFORM_PROVIDERS,
TEST_BROWSER_APPLICATION_PROVIDERS
} from 'angular2/platform/testing/browser';

setBaseTestProviders(TEST_BROWSER_PLATFORM_PROVIDERS, TEST_BROWSER_APPLICATION_PROVIDERS);

describe('ServiceName', () => {

it('should have name property set', injectAsync([TestComponentBuilder], (tcb: TestComponentBuilder) => {
return tcb.createAsync(ComponentName).then((fixture) => {
fixture.debugElement.componentInstance.isPanelActive = true;
fixture.detectChanges();

var compiled = fixture.debugElement.nativeElement;
expect(compiled.querySelector('a.yes')).toContainText('Something');
});
}));

});

我得到的错误是:

 Failed: No provider for ServiceName! (ComponentName -> ServiceName)
Error: DI Exception

我尝试了 overrideProvide 方法,它没有用,还尝试在测试中创建一个 TestComponent 并将提供程序与 ComponentName 指令一起传递到那里。

有人知道吗?是否不可能通过引导文件引导服务并且不在@Component 中使用提供程序?我认为这就是 beforeEachProviders 的重点。

最佳答案

解决了。这是 System.js 配置。它没有给出任何其他错误。因为有这么多场景,我怀疑是在配置 block 中使用包导致的。我重新配置了我的 karma 和 test-main 文件:

https://github.com/mgechev/angular2-seed

谢谢

关于Angular 2 单元测试 beforeEachProvider 不注入(inject)服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35425457/

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