Aqui ejecutaremos pruebas a promesas desde componentes para lo cual probaremos utilizando value service que tiene una funci贸n de llamada a una promesa
primero lo inyectaremos como dependencia
products.component.ts
import { ValueService } from './../../services/value.service';
constructor(
聽 聽 private valueService: ValueService,
聽 ) { }
async callPromise () {
聽 聽 const rta = await this.valueService.getPromiseValue();
聽 聽 this.rta = rta;
聽 }
luego lo llamaremos para hacer las pruebas
products.component.spec.ts
import { ValueService } from './../../services/value.service';
describe('ProductsComponent', () => {
聽 let valueService: jasmine.SpyObj<ValueService>;
聽 beforeEach(async () => {
聽 聽 const productServiceSpy = jasmine.createSpyObj('ProductsService', ['getAll']);
聽 聽 const valueServiceSpy = jasmine.createSpyObj('ValueService', ['getPromiseValue']);
聽 聽 await TestBed.configureTestingModule({
聽 聽 聽 declarations: [ ProductsComponent, ProductComponent ],
聽 聽 聽 providers: [
聽 聽 聽 聽 { provide: ProductsService, useValue: productServiceSpy },
聽 聽 聽 聽 { provide: ValueService, useValue: valueServiceSpy }
聽 聽 聽 ]
聽 聽 })
聽 聽 .compileComponents();
聽 });
聽
beforeEach(() => {
聽 聽 fixture = TestBed.createComponent(ProductsComponent);
聽 聽 component = fixture.componentInstance;
聽 聽 productService = TestBed.inject(ProductsService) as jasmine.SpyObj<ProductsService>;
聽 聽 valueService = TestBed.inject(ValueService) as jasmine.SpyObj<ValueService>;
聽 聽 const productsMock = generateManyProducts(3);
聽 聽 productService.getAll.and.returnValue(of(productsMock));
聽 聽 fixture.detectChanges(); //ngOnInit()
聽 });
describe('test for callPromise', () => {
聽 聽 it('should call to promise', async() => {
聽 聽 聽 // Arrange
聽 聽 聽 const mockMsg = 'my mock string';
聽 聽 聽 valueService.getPromiseValue.and.returnValue(Promise.resolve(mockMsg));
聽 聽 聽 // Act
聽 聽 聽 await component.callPromise();
聽 聽 聽 fixture.detectChanges();
聽 聽 聽 // Assert
聽 聽 聽 expect(component.rta).toEqual(mockMsg);
聽 聽 聽 expect(valueService.getPromiseValue).toHaveBeenCalled();
聽 聽 });
Want to see more contributions, questions and answers from the community?