Skip to content

Instantly share code, notes, and snippets.

@FrankMerema
Created June 22, 2018 09:00
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save FrankMerema/8c84be6026df1ecf73fdc503fef331ed to your computer and use it in GitHub Desktop.
Save FrankMerema/8c84be6026df1ecf73fdc503fef331ed to your computer and use it in GitHub Desktop.
Testing Angular component with api service in OnInit (Spectator)
import {HttpClient} from '@angular/common/http';
import {Injectable} from '@angular/core';
import {Observable} from 'rxjs/index';
export interface someObject {
}
@Injectable({
providedIn: 'root'
})
export class RestService {
constructor(private http: HttpClient) {
}
getAllStuffFromServer(): Observable<Array<SomeObject>> {
return this.http.get<Array<SomeObject>>(`/api/some/all`);
}
}
import {createTestComponentFactory, Spectator} from '@netbasal/spectator';
import {of} from 'rxjs/index';
import {RestService, someObject} from './rest.service';
import {SomeComponent} from './some.component';
describe('SomeComponent', () => {
const createComponent = createTestComponentFactory({
component: SomeComponent,
mocks: [RestService]
});
let spectator: Spectator<SomeComponent>;
beforeEach(() => {
spectator = createComponent(null, false);
spectator.get(RestService).getAllStuffFromServer.andReturn(of({}));
spectator.detectChanges();
});
it('should create', () => {
expect(spectator.component).toBeTruthy();
});
});
import {Component, OnInit} from '@angular/core';
import {RestService, SomeObject} from './rest.service';
@Component({
selector: 'some-component',
templateUrl: './some.component.html',
styleUrls: ['./some.component.scss']
})
export class SomeComponent implements OnInit {
someObjects: Array<SomeObjects>;
constructor(private restService: RestService) {
}
ngOnInit() {
this.restService.getAllStuffFromServer()
.subscribe(someObjects => {
this.someObjects = someObjects;
});
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment