gpt4 book ai didi

angular - 单元测试 Angular 2 服务主题

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

我正在尝试为具有 Subject 属性和调用 .next() 的方法的 Angular 服务编写测试。

服务如下:

@Injectable()
export class SubjectService {
serviceSubjectProperty$: Subject<any> = new Subject();

callNextOnSubject(data: any) {
this.serviceSubjectProperty$.next(data);
}
}

以及该服务的测试文件:

import { TestBed, inject } from '@angular/core/testing';

import { SubjectService } from './subject.service';

describe('SubjectService', () => {

beforeEach(() => {
TestBed.configureTestingModule({
providers: [
SubjectService
]
});
});

it('callNextOnSubject() should emit data to serviceSubjectProperty$ Subject',
inject([SubjectService], (subjectService) => {
subjectService.callNextOnSubject('test');

subjectServiceProperty$.subscribe((message) => {
expect(message).toBe('test');
})
}));
});

如果我将 subjectService.callNextOnSubject 的参数从 'test' 更改为其他任何内容,测试始终会通过事件。

我也尝试过用 asyncfakeAsync 包装所有东西,但结果是一样的。

测试 callNextOnSubject 是否正在向 serviceSubjectProperty$ Subject 发送数据的正确方法是什么?

最佳答案

我在寻找解决方案时发现了这篇文章:

http://www.syntaxsuccess.com/viewarticle/unit-testing-eventemitter-in-angular-2.0

它对我来说效果很好(它很短,不要害怕打开它)。

我把它粘贴在这里,这样也许它会帮助那些来到这个网站寻找答案的人。


关于提出的问题 - 我认为您需要更改:

  subjectService.callNextOnSubject('test');

subjectServiceProperty$.subscribe((message) => {
expect(message).toBe('test');
})

  subjectServiceProperty$.subscribe((message) => {
expect(message).toBe('test');
})

subjectService.callNextOnSubject('test');

,所以首先订阅,然后发出一个事件。

如果您在订阅前发出 'test',则没有任何东西会“捕获”该事件。

关于angular - 单元测试 Angular 2 服务主题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45111498/

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