Javascript 没有平台的提供者

Javascript 没有平台的提供者,javascript,angular,angular-material,angular-cdk,Javascript,Angular,Angular Material,Angular Cdk,因此,我在为Angular 4应用程序进行单元测试时遇到了这个问题 所发生的是,它不断给出问题标题中所述的错误 我试着用谷歌搜索它,试着导入一大堆不同的模块,最后发现这个“平台”的确切答案可能是来自@angular/browser平台的browserModule 所以在我的单元测试中,我尝试导入它并声明它,但它没有帮助 我甚至不知道这个“平台”是什么,有人能帮我吗 问题:错误中的“平台”到底是什么?如何修复 谢谢 我已附上我的代码如下: import { ComponentFixture, Te

因此,我在为Angular 4应用程序进行单元测试时遇到了这个问题

所发生的是,它不断给出问题标题中所述的错误

我试着用谷歌搜索它,试着导入一大堆不同的模块,最后发现这个“平台”的确切答案可能是来自
@angular/browser
平台的browserModule

所以在我的单元测试中,我尝试导入它并声明它,但它没有帮助

我甚至不知道这个“平台”是什么,有人能帮我吗

问题:错误中的“平台”到底是什么?如何修复

谢谢

我已附上我的代码如下:

import { ComponentFixture, TestBed, async} from "@angular/core/testing";
import { DebugElement, CUSTOM_ELEMENTS_SCHEMA, PlatformRef} from 
"@angular/core";
import { TeamCreationAssignmentComponent } from "./team-creation-assignment.component";
import { OdmService } from "../../services/odm/odm.service";
import { UserNotificationService } from "../../services/user/user-notification.service";
import { MatSnackBar } from "@angular/material";
import { OVERLAY_PROVIDERS, ScrollStrategyOptions, ScrollDispatcher} from "@angular/cdk/overlay";

describe('Team creation assignment component', () => {
let comp: TeamCreationAssignmentComponent;
let fixture: ComponentFixture<TeamCreationAssignmentComponent>;

let odmServiceSub = {};


beforeEach(async(() => {
    TestBed.configureTestingModule({

        declarations: [TeamCreationAssignmentComponent],
        //imports: [BrowserModule],
        schemas: [CUSTOM_ELEMENTS_SCHEMA],
        providers: [
            {provide: OdmService, useValue: odmServiceSub}, 
            UserNotificationService, 
            MatSnackBar, 
            OVERLAY_PROVIDERS, 
            ScrollStrategyOptions,
            ScrollDispatcher,
        ],
    })
    .compileComponents();
}));

beforeEach(() => {
    fixture = TestBed.createComponent(TeamCreationAssignmentComponent);
    comp = fixture.componentInstance;
});

it('should have defined component', () => {
    expect(comp).toBeDefined();
})
import{ComponentFixture,TestBed,async}来自“@angular/core/testing”;
从导入{DebugElement,自定义元素\架构,PlatformRef}
“@角度/核心”;
从“/team creation assignment.component”导入{TeamCreationAssignmentComponent};
从“../../services/odm/odm.service”导入{OdmService}”;
从“../../services/user/user notification.service”导入{UserNotificationService}”;
从“@angular/material”导入{matsnakbar}”;
从“@angular/cdk/OVERLAY”导入{OVERLAY_提供程序、ScrollStrategyOptions、ScrollDispatcher}”;
描述('团队创建分配组件',()=>{
let comp:TeamCreationAssignmentComponent;
let夹具:组件夹具;
设odmServiceSub={};
beforeach(异步(()=>{
TestBed.configureTestingModule({
声明:[TeamCreationAssignmentComponent],
//导入:[BrowserModule],
模式:[自定义元素\u模式],
供应商:[
{provide:OdmService,useValue:odmServiceSub},
用户通知服务,
Matsnakbar,
覆盖服务提供商,
滚动战略选项,
调度员,
],
})
.compileComponents();
}));
在每个之前(()=>{
fixture=TestBed.createComponent(TeamCreationAssignmentComponent);
comp=夹具。组件状态;
});
它('应该定义组件',()=>{
期望(comp.toBeDefined();
})

}))

每当您收到“XXX没有提供程序”的消息时,通常意味着您在
configureTestingModule
方法中的
providers
数组中丢失了一些内容。您是否尝试将
PlatformRef
添加到
providers
数组中?像这样:

providers: [
    {provide: OdmService, useValue: odmServiceSub}, 
    UserNotificationService, 
    MatSnackBar, 
    OVERLAY_PROVIDERS, 
    ScrollStrategyOptions,
    ScrollDispatcher,
    PlatformRef // <- added here
],

我要说的一件事是,在我的Angular 4应用程序中,大约有800个单元测试,其中没有一个使用或需要这个
PlatformRef
。我认为问题在于缺少
检测更改
,而不是与此“平台”相关的任何内容。

每当您收到消息说“XXX没有提供程序”时,通常意味着您缺少
配置测试模块
方法中的
提供程序
数组中的某些内容。您是否尝试将
PlatformRef
添加到
providers
数组中?像这样:

providers: [
    {provide: OdmService, useValue: odmServiceSub}, 
    UserNotificationService, 
    MatSnackBar, 
    OVERLAY_PROVIDERS, 
    ScrollStrategyOptions,
    ScrollDispatcher,
    PlatformRef // <- added here
],

我要说的一件事是,在我的Angular 4应用程序中,大约有800个单元测试,其中没有一个使用或需要这个
PlatformRef
。我认为问题在于缺少
检测更改
,而不是与此“平台”相关的任何内容。

我在使用FocusMonitor时遇到了类似的问题(在Angular 5中),并希望根据它测试组件。FocusMonitor反过来又依赖于平台

在您的情况下,它与

您需要在测试床的提供者中添加平台

import { Platform } from '@angular/cdk/platform';


我在使用FocusMonitor时遇到了一个类似的问题(在Angular 5中),并希望根据它来测试组件。FocusMonitor反过来又依赖于平台

在您的情况下,它与

您需要在测试床的提供者中添加平台

import { Platform } from '@angular/cdk/platform';


将你的测试文件粘贴到这里。什么是平台已经有了答案,在谷歌搜索中有更多的结果。非常感谢你澄清什么是“平台”。但正如我所说,我在测试代码中尝试了browsermodule,但没有任何效果如果您正在使用
@angular cli
使用它生成组件
ng g c dummy
,然后检查生成的规范文件并与您的进行比较。@sabithpocker我将虚拟测试规范与我的进行了比较,除了在我的spec ts文件中,我有更多的提供者之外,实际上没有太大的区别。但是我必须声明提供者,否则它会给我带来一堆错误。在我来到这里之前,我解决了很多其他的“没有XXX提供商”错误,将你的测试文件粘贴到这里。什么是平台已经有了答案,在谷歌搜索中有更多的结果。非常感谢你对“平台”的澄清。但正如我所说,我在测试代码中尝试了browsermodule,但没有任何效果如果您正在使用
@angular cli
使用它生成组件
ng g c dummy
,然后检查生成的规范文件并与您的进行比较。@sabithpocker我将虚拟测试规范与我的进行了比较,除了在我的spec ts文件中,我有更多的提供者之外,实际上没有太大的区别。但是我必须声明提供者,否则它会给我带来一堆错误。在我来到这里之前,我解决了很多其他的“XXX无提供商”错误。我忘了提到的一件事是,我在整个应用程序中使用了角材料,不知道这是否是原因。但我会尝试你的建议,一旦我有机会让你知道。谢谢有一件事我忘了提到,我在整个应用程序中使用了棱角材料,不知道这是否是原因。但我会尝试你的建议,一旦我有机会让你知道。幸运的是,我不再是那个项目的一部分了。让我把它传给我的队友,看看这是否有效。谢谢你的回答。确认这是有效的。