D. *_*erg 3 unit-testing jasmine karma-jasmine angular
我将 Angular 5 与 Jasmine 和 Karma 一起使用。我正在尝试测试某个功能是否有效,但我的订阅在单元测试期间没有触发。这导致我的单元测试失败,因为我正在使用 jasmine 的 did 函数。我想让这个单元测试成功。
我已将超时间隔设置为 20 秒,以查看是否只花了一段时间(实际上不应该)。
我也尝试过使用 async 和 fakeasync,但它不会触发。我可以触发订阅吗?
这是我得到的代码:
describe('FilterService', () => {
let service: FilterService;
beforeEach(() => {
TestBed.configureTestingModule({
providers: [FilterService]
});
service = TestBed.get(FilterService);
jasmine.DEFAULT_TIMEOUT_INTERVAL = 20000;
});
it("SetItemsToFilterByAndApplyFilters should set ItemsToFilterBy and set the InFilter property", (done: DoneFn) => {
//arrange
let item1: any = new Organisation();
item1.Id = 1;
item1.InFilter = true;
let item2: any = new Organisation();
item1.Id = 2;
item1.InFilter = false;
let itemNew1: any = new Organisation();
itemNew1.Id = 1;
let itemNew2: any = new Organisation();
itemNew2.Id = 2;
service.SetItemsToFilterBy([item1, item2]);
let spy = spyOn(service.ItemsToFilterBy$, 'subscribe');
//act
service.SetItemsToFilterByAndApplyFilters([itemNew1, itemNew2]);
//assert
service.ItemsToFilterBy$.subscribe(result => {
let result1 = _.find(result, item => {
return item.Id == itemNew1.Id;
});
let result2 = _.find(result, item => {
return item.Id == itemNew2.Id;
});
expect(result1.InFilter).toBeTruthy();
expect(result2.InFilter).toBeFalsy();
done();
});
});
});
Run Code Online (Sandbox Code Playgroud)
感谢Basavaraj Bhusani,这是可以使用的代码
it("SetItemsToFilterByAndApplyFilters should set ItemsToFilterBy and set the InFilter property", (done: DoneFn) => {
//arrange
let spy = spyOn(service.ItemsToFilterBy$, 'subscribe').and.callThrough();
let item1: any = new Organisation();
item1.Id = 1;
item1.InFilter = true;
let item2: any = new Organisation();
item2.Id = 2;
item2.InFilter = false;
let itemNew1: any = new Organisation();
itemNew1.Id = 1;
let itemNew2: any = new Organisation();
itemNew2.Id = 2;
service.SetItemsToFilterBy([item1, item2]);
//act
service.SetItemsToFilterByAndApplyFilters([itemNew1, itemNew2]);
//assert
service.ItemsToFilterBy$.subscribe(result => {
let result1 = _.find(result, item => {
return item.Id == itemNew1.Id;
});
let result2 = _.find(result, item => {
return item.Id == itemNew2.Id;
});
expect(result1.InFilter).toBeTruthy();
expect(result2.InFilter).toBeFalsy();
done();
});
expect(spy).toHaveBeenCalled();
});
});
Run Code Online (Sandbox Code Playgroud)
如果service.ItemsToFilterBy$是Subject<any>()、不是BehaviorSubject或,请在规范的开头ReplaySubject订阅。service.ItemsToFilterBy$阅读此处。
当您监视某个方法时,
请使用该callThrough()方法。jasminespyOn(service.ItemsToFilterBy$, 'subscribe')
IE
const spy = spyOn(service.ItemsToFilterBy$, 'subscribe').and.callThrough();
Run Code Online (Sandbox Code Playgroud)
callThrough在这里阅读https://jasmine.github.io/2.0/introduction.html
| 归档时间: |
|
| 查看次数: |
11542 次 |
| 最近记录: |