jasmine-angular-snapshot-testing
v1.0.1
Published
Angular component snapshot testing for Jasmine
Readme
angular-snapshot-testing
Angular component snapshot testing for Jasmine
How to Use
- Install the extension: Via npm:
npm install jasmine-angular-snapshot-testing --save-devVia yarn:
yarn add jasmine-angular-snapshot-testing --dev- Initialize the testing environment
This extension requries you to run your unit tests on node instead of in a browser.
This requires
@angular/platform-server:
import { getTestBed } from '@angular/core/testing';
import { ServerTestingModule, platformServerTesting } from '@angular/platform-server/testing';
getTestBed().initTestEnvironment(
ServerTestingModule,
platformServerTesting()
);- Configure the extension: After initializing the test environment initialize the snapshot testing extension:
import { initializeSnapshots } from 'jasmine-angular-snapshot-testing';
initializeSnapshots({
/**
* This flag will cause tests to fail if a new snapshot shoudl be generated.
* Generally, you want to set this value to true when running tests on CI
* and false when writing new unit tests
*/
failOnSnapshotDiscovery: false,
/**
* This is the file extension that will be appended to the end of test
* files when generating a snapshot file.
*
* For example, if this is set to 'snap' and the spec file is called
* 'table.component.spec.ts' then the generated file will be called
* 'table.component.spec.ts.snap'
*/
fileExtension: 'snap',
/**
* This flag will cause new snapshots to overwrite existing snapshots.
* This is useful during development.
*
* Be aware that if this is set to 'true' snapshot tests will never fail.
*/
discardOldSnapshots: false,
});- Use beforeAll/afterAll hooks to load and save snapshots: This must be done in each spec file:
import * as snapshots from 'jasmine-angular-snapshot-testing';
describe('Table Component', () => {
beforeAll(() => snapshots.load(module));
afterAll(() => snapshots.save());
});- Generate snapshots:
Use the new
toMatchSnapshot()matcher to generate snapshots for any object that implements.toJSON(). Note that this module adds a.toJSON()method to component fixtures:
let fixture: ComponentFixture<TableComponent>;
beforeEach(async(() => {
TestBed.compileComponents()
.then(() => {
fixture = TestBed.createComponent(TableComponent);
fixture.detectChanges();
});
}));
it('should compile successfully', () => {
expect(fixture).toMatchSnapshot();
});Caveats
This module has a number of caveats that restrict the type of components that can be tested with snapshots:
Unit tests must be run on node instead of a browser. This is a requirement because this extension requires access to the filesystem
Components cannot make use of external stylesheets or templates. This is because
platform-serverdoes not implement aResourceLoader, though one may be able to be written.
