javascript - Karma/Jasmine Angular InjectionToken 测试失败,除非我使用 fdescribe
问题描述
我有以下规格测试:
import { HttpClientTestingModule } from '@angular/common/http/testing';
import { Component } from '@angular/core';
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { of } from 'rxjs';
import { BASE_API_URL } from 'src/app/tokens/baseApiUrl.token';
import { RbacPermissionsService } from '../services/rbac-permissions.service';
import { SharedModule } from '../shared.module';
@Component({
selector: 'app-mock-test',
template: `<div *appHasPermission="{ items: 'view' }"></div>`,
providers: []
})
export class MockTestComponent {
constructor() {}
}
describe('HasPermissionDirective', () => {
let mockTestComponent: MockTestComponent;
let mockTestFixture: ComponentFixture<MockTestComponent>;
let rbacPermissionsService: RbacPermissionsService;
beforeEach(() => {
TestBed.configureTestingModule({
declarations: [MockTestComponent],
imports: [SharedModule, HttpClientTestingModule],
providers: [{provide: BASE_API_URL, useValue: '/some_api/'}]
});
rbacPermissionsService = TestBed.get(RbacPermissionsService);
mockTestFixture = TestBed.createComponent(MockTestComponent);
mockTestComponent = mockTestFixture.componentInstance;
});
it('should have no divs when permission is false', done => {
spyOn(rbacPermissionsService, 'getPermission').and.returnValue(of(false));
mockTestFixture.whenStable().then(() => {
mockTestFixture.detectChanges();
const divs = mockTestFixture.nativeElement.getElementsByTagName('div');
expect(divs.length).toBeFalsy();
done();
});
});
it('should have a visible view element when permission is true', done => {
spyOn(rbacPermissionsService, 'getPermission').and.returnValue(of(true));
mockTestFixture.whenStable().then(() => {
mockTestFixture.detectChanges();
const divs = mockTestFixture.nativeElement.getElementsByTagName('div');
expect(divs.length).toBeTruthy();
done();
});
});
});
当我与所有其他测试一起运行它时,它会失败并出现错误:
NullInjectorError: StaticInjectorError(DynamicTestModule)[InjectionToken ]:
StaticInjectorError(Platform: core)[InjectionToken ]:
NullInjectorError: No provider for InjectionToken !
但是当我通过fdescribe
测试运行它时。
我全心全意地承认规格测试不是我的强项。我的直觉说它们可能是一个时间问题,因为测试是孤立地工作的,但在作为更大的测试组的一部分运行时却不是。
解决方案
推荐阅读
- c# - C# 在 X 秒内运行 process.start
- asp.net-mvc - 子记录 asp.net mvc 的数据表
- numpy - Numpy Numpty - HexBytes 到字符串文字
- r - 如何在 R 中的 source() 中传递附加信息
- aem - 使用Sightly从AEM 6.4中的页面属性中检索缩略图URL
- python - Selenium 找不到 facebook 页面的 xpath
- r - 如何使用 R 中的“for 循环”自动创建包含来自已知分布的模拟数据的向量列表?
- javascript - nodejs登录系统密码未定义
- postgresql - Sequelize 迁移工具找不到 config.json 中定义的架构
- android-studio - Flutter 热重载和热重启仅在某些模块/文件中不起作用(Android Studio,Windows 10)