easier mocking/spying using ts-mocks

This commit is contained in:
alecmerdler 2017-03-11 15:27:23 -08:00
parent 4303f658e8
commit 40e6540074
8 changed files with 73 additions and 22 deletions

View file

@ -1,22 +1,22 @@
import { DockerfileServiceImpl, DockerfileInfoImpl } from './dockerfile.service.impl';
import { DatafileService } from '../datafile/datafile.service';
import Spy = jasmine.Spy;
import { Mock } from 'ts-mocks';
describe("DockerfileServiceImpl", () => {
var dockerfileServiceImpl: DockerfileServiceImpl;
var dataFileServiceMock: any;
var datafileServiceMock: Mock<DatafileService>;
var datafileService: DatafileService;
var configMock: any;
var fileReaderMock: FileReader;
beforeEach(() => {
dataFileServiceMock = jasmine.createSpyObj('dataFileServiceMock', [
'readDataArrayAsPossibleArchive',
'arrayToString',
'blobToString',
]);
datafileServiceMock = new Mock<DatafileService>();
datafileService = datafileServiceMock.Object;
configMock = jasmine.createSpyObj('configMock', ['getDomain']);
fileReaderMock = new FileReader();
dockerfileServiceImpl = new DockerfileServiceImpl(dataFileServiceMock, configMock, () => fileReaderMock);
dockerfileServiceImpl = new DockerfileServiceImpl(datafileService, configMock, () => fileReaderMock);
});
describe("getDockerfile", () => {
@ -27,16 +27,15 @@ describe("DockerfileServiceImpl", () => {
var forDataSpy: Spy;
beforeEach(() => {
dataFileServiceMock.readDataArrayAsPossibleArchive.and.callFake((buf, success, failure) => {
datafileServiceMock.setup(mock => mock.readDataArrayAsPossibleArchive).is((buf, success, failure) => {
failure([]);
});
dataFileServiceMock.arrayToString.and.callFake((buf, callback) => {
var contents: string = "";
callback(contents);
datafileServiceMock.setup(mock => mock.arrayToString).is((buf, callback) => {
callback("");
});
dataFileServiceMock.blobToString.and.callFake((blob, callback) => {
datafileServiceMock.setup(mock => mock.blobToString).is((blob, callback) => {
callback(blob.toString());
});
@ -55,7 +54,7 @@ describe("DockerfileServiceImpl", () => {
dockerfileServiceImpl.getDockerfile(file)
.then((dockerfile: DockerfileInfoImpl) => {
expect(readAsFileBufferSpy.calls.argsFor(0)[0]).toEqual(file);
expect(dataFileServiceMock.readDataArrayAsPossibleArchive).toHaveBeenCalled();
expect(datafileService.readDataArrayAsPossibleArchive).toHaveBeenCalled();
done();
})
.catch((error: string) => {
@ -67,7 +66,7 @@ describe("DockerfileServiceImpl", () => {
it("calls datafile service to convert file to string if given file is not an archive", (done) => {
dockerfileServiceImpl.getDockerfile(file)
.then((dockerfile: DockerfileInfoImpl) => {
expect(dataFileServiceMock.arrayToString.calls.argsFor(0)[0]).toEqual(file);
expect((<Spy>datafileService.arrayToString).calls.argsFor(0)[0]).toEqual(file);
done();
})
.catch((error: string) => {
@ -102,7 +101,7 @@ describe("DockerfileServiceImpl", () => {
});
it("returns rejected promise if given archive file with no Dockerfile present in root directory", (done) => {
dataFileServiceMock.readDataArrayAsPossibleArchive.and.callFake((buf, success, failure) => {
datafileServiceMock.setup(mock => mock.readDataArrayAsPossibleArchive).is((buf, success, failure) => {
success(invalidArchiveFile);
});
@ -118,14 +117,14 @@ describe("DockerfileServiceImpl", () => {
});
it("calls datafile service to convert blob to string if given file is an archive", (done) => {
dataFileServiceMock.readDataArrayAsPossibleArchive.and.callFake((buf, success, failure) => {
datafileServiceMock.setup(mock => mock.readDataArrayAsPossibleArchive).is((buf, success, failure) => {
success(validArchiveFile);
});
dockerfileServiceImpl.getDockerfile(file)
.then((dockerfile: DockerfileInfoImpl) => {
expect(validArchiveFile[0].toBlob).toHaveBeenCalled();
expect(dataFileServiceMock.blobToString.calls.argsFor(0)[0]).toEqual(validArchiveFile[0].toBlob());
expect((<Spy>datafileService.blobToString).calls.argsFor(0)[0]).toEqual(validArchiveFile[0].toBlob());
done();
})
.catch((error: string) => {
@ -137,7 +136,7 @@ describe("DockerfileServiceImpl", () => {
it("returns rejected promise if given archive file with invalid Dockerfile", (done) => {
forDataSpy.and.returnValue(null);
invalidArchiveFile[0].name = 'Dockerfile';
dataFileServiceMock.readDataArrayAsPossibleArchive.and.callFake((buf, success, failure) => {
datafileServiceMock.setup(mock => mock.readDataArrayAsPossibleArchive).is((buf, success, failure) => {
success(invalidArchiveFile);
});
@ -153,7 +152,7 @@ describe("DockerfileServiceImpl", () => {
});
it("returns resolved promise of new DockerfileInfoImpl instance if given archive with valid Dockerfile", (done) => {
dataFileServiceMock.readDataArrayAsPossibleArchive.and.callFake((buf, success, failure) => {
datafileServiceMock.setup(mock => mock.readDataArrayAsPossibleArchive).is((buf, success, failure) => {
success(validArchiveFile);
});