What is the Jasmine test framework?
Why Jasmine?
Jasmine is a JavaScript testing framework that supports a software development practice called Behaviour Driven Development that plays very well with Karma.
It’s a specific flavor of Test Driven Development (TDD).
Jasmine is also dependency-free and doesn’t require a DOM.
Jasmine provides a rich set of pre-defined matchers - default set of matchers
1. expect(number).toBeGreaterThan(number);
2. expect(number).toBeLessThan(number);
3. expect(array).toContain(member);
4. expect(array).toBeArray();
5. expect(fn).toThrow(string);
6. expect(fn).toThrowError(string);
7. expect(instance).toBe(instance); represents the exact equality (===) operator.
8. expect(mixed).toBeDefined();
9. expect(mixed).toBeFalsy();
10. expect(mixed).toBeNull();
11. expect(mixed).toBeTruthy();
12. expect(mixed).toBeUndefined();
13. expect(mixed).toEqual(mixed); represents the regular equality (==) operator.
14. expect(mixed).toMatch(pattern); calls the RegExp match() method behind the scenes to compare string data.
15. expect(number).toBeCloseTo(number, decimalPlaces);
16. expect(number).toBeNaN();
17. expect(spy).toHaveBeenCalled();
18. expect(spy).toHaveBeenCalledTimes(number);
19. expect(date).toBeAfter(otherDate);
20. expect(date).toBeBefore(otherDate);
21. expect(date).toBeDate();
22. expect(date).toBeValidDate();
23. expect(object).toHaveDate(memberName);
24. expect(object).toHaveDateAfter(memberName, date);
25. expect(object).toHaveDateBefore(memberName, date);
26. expect(regexp).toBeRegExp();
27. expect(string).toBeEmptyString();
28. expect(string).toBeHtmlString();
29. expect(string).toBeIso8601();
30. expect(string).toBeJsonString();
31. expect(string).toBeLongerThan();
32. expect(string).toBeString();
Default set of Asymmetric Matchers-
1. jasmine.any(Constructor);
2. jasmine.anything(mixed);
3. jasmine.arrayContaining(mixed);
4. jasmine.objectContaining(mixed);
5. jasmine.stringMatching(pattern);
Lest see the testing example for AppComponent and it look like this.
import { TestBed, async } from '@angular/core/testing';
import { AppComponent } from './app.component';
describe('AppComponent', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [
AppComponent
],
}).compileComponents();
}));
it('should create the app', async(() => {
const fixture = TestBed.createComponent(AppComponent);
const app = fixture.debugElement.componentInstance;
expect(app).toBeTruthy();
}));
it(`should have as title 'app'`, async(() => {
const fixture = TestBed.createComponent(AppComponent);
const app = fixture.debugElement.componentInstance;
expect(app.title).toEqual('app');
}));
it('should render title in a h1 tag', async(() => {
const fixture = TestBed.createComponent(AppComponent);
fixture.detectChanges();
const compiled = fixture.debugElement.nativeElement;
expect(compiled.querySelector('h1').textContent).toContain('Welcome to app!');
}));
});