angular - 尝试运行“ng test”时没有提供 MatSnackBar 错误
问题描述
所以我试图在我的 Angular 4 Angular CLI 上运行“ng test”。我遇到了很多问题,例如如果测试失败,UI 不会加载任何有用的消息,但幸运的是控制台可以工作。无论如何,这个错误是说我没有在规范中给 MatSnackBar 提供者,但是当我这样做时,我得到了一个不同的错误。
Chrome 66.0.3359 (Linux 0.0.0) BranchNameCellComponent should create FAILED
Error: No provider for MatSnackBar!
当我将 MatSnackBar 作为导入时出错
Chrome 66.0.3359 (Linux 0.0.0) BranchNameCellComponent should create FAILED
Failed: Unexpected value 'MatSnackBar' imported by the module 'DynamicTestModule'. Please add a @NgModule annotation.
在我的组件代码中,我正在导入 MatSnackBar 并在构造函数中调用它。它工作正常。
import { MatSnackBar } from '@angular/material';
....
constructor(private httpClient: HttpClient, private fb: FormBuilder, public snackBar: MatSnackBar) { }
但是在规范中,我尝试这样做无济于事。
import { MatSnackBar } from '@angular/material';
....
describe('BranchNameCellComponent', () => {
let component: BranchNameCellComponent;
let fixture: ComponentFixture<BranchNameCellComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ BranchNameCellComponent ],
imports: [ HttpClientTestingModule, ReactiveFormsModule, MatSnackBar ],
schemas: [ NO_ERRORS_SCHEMA ]
})
.compileComponents();
}));
it('should create', () => {
fixture = TestBed.createComponent(BranchNameCellComponent);
component = fixture.componentInstance;
expect(component).toBeTruthy();
});
});
像 Diego 建议的那样导入模块后,我现在在同一个测试中遇到超时错误
08 06 2018 16:14:52.839:WARN [Chrome 66.0.3359 (Linux 0.0.0)]: Disconnected (1 times), because no message in 10000 ms.
Chrome 66.0.3359 (Linux 0.0.0) ERROR
Chrome 66.0.3359 (Linux 0.0.0) ERROR
Disconnected, because no message in 10000 ms.
Chrome 66.0.3359 (Linux 0.0.0): Executed 16 of 56 DISCONNECTED (11.204 secs / 1.241 secs)
Chrome 66.0.3359 (Linux 0.0.0) ERROR
Chrome 66.0.3359 (Linux 0.0.0): Executed 16 of 56 DISCONNECTED (11.204 secs / 1.241 secs)
解决方案
您应该导入模块而不是组件。
import { MatSnackBar, MatSnackBarModule } from '@angular/material';
....
describe('BranchNameCellComponent', () => {
let component: BranchNameCellComponent;
let fixture: ComponentFixture<BranchNameCellComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ BranchNameCellComponent ],
imports: [ HttpClientTestingModule, ReactiveFormsModule, MatSnackBarModule ],
schemas: [ NO_ERRORS_SCHEMA ]
}).compileComponents();
}));
it('should create', () => {
fixture = TestBed.createComponent(BranchNameCellComponent);
component = fixture.componentInstance;
expect(component).toBeTruthy();
});
});
对于与超时相关的问题,请尝试将其添加到您的 karma 配置文件中:
captureTimeout: 210000,
browserDisconnectTolerance: 3,
browserDisconnectTimeout : 210000,
browserNoActivityTimeout : 210000,
推荐阅读
- rpgle - RPG 4:将有符号整数转换为日期和时间
- azure-functions - 当队列状态设置为“ReceiveDisabled”时,无法使用“Microsoft.Azure.ServiceBus”对消息进行排队
- php - JSON Feed 到 RSS(问题)
- python - 使用 sql.Literal 在 python 中格式化字符串
- excel - 基于单元格文本的条件格式
- velo - 在 wix corvid 中使用等效的 jQuery.get()
- angular - 角度测试带有参数的编辑服务
- python - Python中高效的组子字符串搜索?
- java - @ExtendWith(SpringExtension.class) 和 @ExtendWith(MockitoExtension.class) 有什么区别?
- python-3.x - 如何在 Windows 和 PyCharm 上使用 PyGObject 模块 (gi)?