import {TweetsComponent} from './tweets.component'; import {async, ComponentFixture, TestBed} from '@angular/core/testing'; import {HttpClient} from '@angular/common/http'; import {MatSnackBar} from '@angular/material/snack-bar'; import {NGXLogger} from 'ngx-logger'; import {MatDialog} from '@angular/material/dialog'; import {HttpClientTestingModule} from '@angular/common/http/testing'; import {FeedService} from "../../services/feed.service"; import {Observable} from "rxjs"; import {IFeed} from "../../interfaces/feed.interface"; import {Tweet} from "../../interfaces/interface"; import {By} from "@angular/platform-browser"; class MockSnackBar { } class MockMatDialog { } class MockNGXLogger { } //Fake Feed Service export class MockFeedService { getFeeds(): Observable { return new Observable(); } } export function mockFillTweets() { for (let i = 0; i < 6; i++) { const tweet: Tweet = {tweet_id: i, created_date: null, text: "Mock", url: "Mock", icon: null} this.tweets.push(tweet); } } describe('Component: Tweets', () => { let fixture: ComponentFixture; let component: TweetsComponent; beforeEach(async(() => { //Cancelling initial load and mock http calls TweetsComponent.prototype.ngOnInit = () => { }; TweetsComponent.prototype.fillTweets = mockFillTweets; TweetsComponent.prototype.loadMore = mockFillTweets; TestBed.configureTestingModule({ imports: [HttpClientTestingModule], providers: [ {provide: HttpClient, useClass: HttpClientTestingModule}, {provide: FeedService, useClass: MockFeedService}, {provide: MatSnackBar, useClass: MockSnackBar}, {provide: MatDialog, useClass: MockMatDialog}, {provide: NGXLogger, useClass: MockNGXLogger} ] }).compileComponents(); fixture = TestBed.createComponent(TweetsComponent); component = fixture.componentInstance; fixture.detectChanges(); })); it('is TweetsComponent to be defined', () => { expect(component).toBeDefined(); }); it('Show text if feeds are empty', () => { expect(fixture.debugElement.query(By.css('.feeds'))).toBeDefined(); }); it('Do not show text if feeds are filled', () => { const feed: IFeed = {active: true, icon: null, id: 1, keywords: null, match_all_keywords: "false", url: ""}; component.feeds.push(feed); expect(fixture.debugElement.query(By.css('.feeds'))).toBeNull(); }); it('initial Tweets empty', () => { expect(component.tweets.length).toEqual(0); }); it('Show text if tweets are empty', () => { expect(fixture.debugElement.query(By.css('.tweets'))).toBeDefined(); }) it('Do not show text if tweets are filled', () => { component.fillTweets(); expect(fixture.debugElement.query(By.css('.tweets'))).toBeNull(); }); it('load initial six Tweets works', () => { component.fillTweets(); expect(component.tweets.length).toEqual(6); }); it('load more Tweets works', () => { component.fillTweets(); component.loadMore(); expect(component.tweets.length).toEqual(12); }); it('load more Tweets twice works', () => { component.fillTweets(); component.loadMore(); component.loadMore(); expect(component.tweets.length).toEqual(18); }); });