提问人:Marvin Valke 提问时间:11/10/2023 更新时间:11/14/2023 访问量:16
使用 L10nTranslate 实现 Angular 测试
Implement Angular Test with L10nTranslate
问:
我正在尝试在 Angular 应用程序中使用 Karma 实现测试。 我遇到了一个问题,因为我的组件使用了 L10nTranslate,所以我尝试将模块导入我的测试文件
我的组件
@Component({
selector: 'app-task',
templateUrl: './task.component.html',
styleUrls: ['./task.component.scss'],
providers: [
{provide: MAT_DATE_LOCALE, useValue: 'fr-FR'},
],
})
export class TaskComponent implements OnInit, OnDestroy {
constructor(
private route: ActivatedRoute,
private router: Router,
private taskService: TaskService,
private taskListService: TaskListService,
private taskListHasTaskService: TaskListHasTaskService,
private projectService: ProjectService,
private projectStoreService: ProjectStoreService,
private commentService: CommentService,
public sessionService: SessionService,
public clipboard: Clipboard,
public snackBar: MatSnackBar,
private taskModalService: TaskModalService,
public dialog: MatDialog,
private errorService: ErrorService,
private taskUpdateHandlerService: TaskUpdateHandlerService,
private translation: L10nTranslationService,
private attachmentService: AttachmentService,
public userAuthorizationService: UserAuthorizationService,
private sseService: SseService,
private _location: Location,
private translationService: L10nTranslationService,
private flattenTasksPipe: FlattenTasksPipe
) {
}
ngOnInit(): void {
}
和我的测试文件
describe('TaskComponent', () => {
let component: TaskComponent;
let fixture: ComponentFixture<TaskComponent>;
let service: L10nTranslationService;
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [TaskComponent, MatMenu],
imports: [MatDialogModule, MatMenuModule, L10nTranslationModule],
providers: [
{provide: ActivatedRoute, useValue: {}},
{provide: L10nTranslationService, useValue: {}},
{provide: MatSnackBar, useValue: {}},
{provide: Router, useValue: {}},
{provide: TaskService, useValue: {}},
{provide: TaskListService, useValue: {}},
{provide: TaskListHasTaskService, useValue: {}},
{provide: ProjectService, useValue: {}},
{provide: ProjectStoreService, useValue: {}},
{provide: CommentService, useValue: {}},
{provide: SessionService, useValue: {}},
{provide: TaskModalService, useValue: {}},
{provide: ErrorService, useValue: {}},
{provide: TaskUpdateHandlerService, useValue: {}},
{provide: AttachmentService, useValue: {}},
{provide: UserAuthorizationService, useValue: {}},
{provide: SseService, useValue: {}},
{provide: Location, useValue: {}},
{provide: FlattenTasksPipe, useValue: {}}
]
})
.compileComponents();
fixture = TestBed.createComponent(TaskComponent);
component = fixture.componentInstance;
fixture.detectChanges();
service = TestBed.inject(L10nTranslationService);
});
it('should return a string', () => {
expect(component.dummyFunction(42)).toBe('42');
});
});
我总是收到错误:Chrome 119.0.0.0 (Mac OS 10.15.7) TaskComponent应返回字符串FAILED TypeError:this.translation.onChange 不是函数 在新的 L10nAsyncPipe (node_modules/angular-l10n/fesm2020/angular-l10n.mjs:678:43) 在新的 L10nTranslateAsyncPipe (node_modules/angular-l10n/fesm2020/angular- l10n.mjs:1080:1) 在L10nAsyncPipe_Factory (node_modules/angular-l10n/fesm2020/angular-l10n.mjs:687:19) 在 pipeFactory (node_modules/angular-l10n/fesm2020/angular-l10n.mjs:1087:138) 在ɵɵpipe(node_modules/@angular/core/fesm2020/core.mjs:20735:30) 在 templateFn (ng:///TaskComponent.js:640:9) 在 executeTemplate (node_modules/@angular/core/fesm2020/core.mjs:10441:9) 在 renderView (node_modules/@angular/core/fesm2020/core.mjs:10263:13) 在 renderComponent (node_modules/@angular/core/fesm2020/core.mjs:11434:5) 在 renderChildComponents (node_modules/@angular/core/fesm2020/core.mjs:10122:9) Chrome 119.0.0.0 (Mac OS 10.15.7):已执行 5 个(共 5 个)(1 个失败)(0.144 秒 / 0.126 秒) 总计:1 次失败,4 次成功
我不知道如何解决这个问题。所有模块都已正确导入,到目前为止,所有模块都是最新的,我不知道如何开始测试。
感谢您的帮助
我尝试导入/声明我的组件类中使用的所有模块。 我尝试了几种注入 L10nTranslationModule 和/或 L10nTranslationService 的方法
我总是以错误告终
答:
问题很可能出在这条线上:
{provide: L10nTranslationService, useValue: {}},
我们提供了一个空对象,因此没有方法。L10nTranslationService
onChange
要快速解锁,请尝试以下操作:
{provide: L10nTranslationService, useValue: { onChange: () => null }},
您很可能也必须准确地模拟其他提供程序,并且它们不能是空对象。
这是一篇关于测试具有依赖项的组件的好文章: https://testing-angular.com/testing-components-depending-on-services/#testing-components-depending-on-services。
下一个:如何测试该订阅?
评论