First replacements of sinon mocks with jest mocks

This commit is contained in:
Alejandro Celaya 2019-04-19 10:29:49 +02:00
parent 2cd6e52e9c
commit f8de069567
11 changed files with 666 additions and 127 deletions

531
package-lock.json generated
View file

@ -4296,6 +4296,7 @@
"anymatch": "^2.0.0", "anymatch": "^2.0.0",
"async-each": "^1.0.0", "async-each": "^1.0.0",
"braces": "^2.3.0", "braces": "^2.3.0",
"fsevents": "^1.2.2",
"glob-parent": "^3.1.0", "glob-parent": "^3.1.0",
"inherits": "^2.0.1", "inherits": "^2.0.1",
"is-binary-path": "^1.0.0", "is-binary-path": "^1.0.0",
@ -7042,6 +7043,535 @@
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
"dev": true "dev": true
}, },
"fsevents": {
"version": "1.2.8",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.8.tgz",
"integrity": "sha512-tPvHgPGB7m40CZ68xqFGkKuzN+RnpGmSV+hgeKxhRpbxdqKXUFJGC3yonBOLzQBcJyGpdZFDfCsdOC2KFsXzeA==",
"dev": true,
"optional": true,
"requires": {
"nan": "^2.12.1",
"node-pre-gyp": "^0.12.0"
},
"dependencies": {
"abbrev": {
"version": "1.1.1",
"bundled": true,
"dev": true,
"optional": true
},
"ansi-regex": {
"version": "2.1.1",
"bundled": true,
"dev": true
},
"aproba": {
"version": "1.2.0",
"bundled": true,
"dev": true,
"optional": true
},
"are-we-there-yet": {
"version": "1.1.5",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"delegates": "^1.0.0",
"readable-stream": "^2.0.6"
}
},
"balanced-match": {
"version": "1.0.0",
"bundled": true,
"dev": true
},
"brace-expansion": {
"version": "1.1.11",
"bundled": true,
"dev": true,
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"chownr": {
"version": "1.1.1",
"bundled": true,
"dev": true,
"optional": true
},
"code-point-at": {
"version": "1.1.0",
"bundled": true,
"dev": true
},
"concat-map": {
"version": "0.0.1",
"bundled": true,
"dev": true
},
"console-control-strings": {
"version": "1.1.0",
"bundled": true,
"dev": true
},
"core-util-is": {
"version": "1.0.2",
"bundled": true,
"dev": true,
"optional": true
},
"debug": {
"version": "4.1.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"ms": "^2.1.1"
}
},
"deep-extend": {
"version": "0.6.0",
"bundled": true,
"dev": true,
"optional": true
},
"delegates": {
"version": "1.0.0",
"bundled": true,
"dev": true,
"optional": true
},
"detect-libc": {
"version": "1.0.3",
"bundled": true,
"dev": true,
"optional": true
},
"fs-minipass": {
"version": "1.2.5",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"minipass": "^2.2.1"
}
},
"fs.realpath": {
"version": "1.0.0",
"bundled": true,
"dev": true,
"optional": true
},
"gauge": {
"version": "2.7.4",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"aproba": "^1.0.3",
"console-control-strings": "^1.0.0",
"has-unicode": "^2.0.0",
"object-assign": "^4.1.0",
"signal-exit": "^3.0.0",
"string-width": "^1.0.1",
"strip-ansi": "^3.0.1",
"wide-align": "^1.1.0"
}
},
"glob": {
"version": "7.1.3",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^3.0.4",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
}
},
"has-unicode": {
"version": "2.0.1",
"bundled": true,
"dev": true,
"optional": true
},
"iconv-lite": {
"version": "0.4.24",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"safer-buffer": ">= 2.1.2 < 3"
}
},
"ignore-walk": {
"version": "3.0.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"minimatch": "^3.0.4"
}
},
"inflight": {
"version": "1.0.6",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"once": "^1.3.0",
"wrappy": "1"
}
},
"inherits": {
"version": "2.0.3",
"bundled": true,
"dev": true
},
"ini": {
"version": "1.3.5",
"bundled": true,
"dev": true,
"optional": true
},
"is-fullwidth-code-point": {
"version": "1.0.0",
"bundled": true,
"dev": true,
"requires": {
"number-is-nan": "^1.0.0"
}
},
"isarray": {
"version": "1.0.0",
"bundled": true,
"dev": true,
"optional": true
},
"minimatch": {
"version": "3.0.4",
"bundled": true,
"dev": true,
"requires": {
"brace-expansion": "^1.1.7"
}
},
"minimist": {
"version": "0.0.8",
"bundled": true,
"dev": true
},
"minipass": {
"version": "2.3.5",
"bundled": true,
"dev": true,
"requires": {
"safe-buffer": "^5.1.2",
"yallist": "^3.0.0"
}
},
"minizlib": {
"version": "1.2.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"minipass": "^2.2.1"
}
},
"mkdirp": {
"version": "0.5.1",
"bundled": true,
"dev": true,
"requires": {
"minimist": "0.0.8"
}
},
"ms": {
"version": "2.1.1",
"bundled": true,
"dev": true,
"optional": true
},
"needle": {
"version": "2.3.0",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"debug": "^4.1.0",
"iconv-lite": "^0.4.4",
"sax": "^1.2.4"
}
},
"node-pre-gyp": {
"version": "0.12.0",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"detect-libc": "^1.0.2",
"mkdirp": "^0.5.1",
"needle": "^2.2.1",
"nopt": "^4.0.1",
"npm-packlist": "^1.1.6",
"npmlog": "^4.0.2",
"rc": "^1.2.7",
"rimraf": "^2.6.1",
"semver": "^5.3.0",
"tar": "^4"
}
},
"nopt": {
"version": "4.0.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"abbrev": "1",
"osenv": "^0.1.4"
}
},
"npm-bundled": {
"version": "1.0.6",
"bundled": true,
"dev": true,
"optional": true
},
"npm-packlist": {
"version": "1.4.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"ignore-walk": "^3.0.1",
"npm-bundled": "^1.0.1"
}
},
"npmlog": {
"version": "4.1.2",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"are-we-there-yet": "~1.1.2",
"console-control-strings": "~1.1.0",
"gauge": "~2.7.3",
"set-blocking": "~2.0.0"
}
},
"number-is-nan": {
"version": "1.0.1",
"bundled": true,
"dev": true
},
"object-assign": {
"version": "4.1.1",
"bundled": true,
"dev": true,
"optional": true
},
"once": {
"version": "1.4.0",
"bundled": true,
"dev": true,
"requires": {
"wrappy": "1"
}
},
"os-homedir": {
"version": "1.0.2",
"bundled": true,
"dev": true,
"optional": true
},
"os-tmpdir": {
"version": "1.0.2",
"bundled": true,
"dev": true,
"optional": true
},
"osenv": {
"version": "0.1.5",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"os-homedir": "^1.0.0",
"os-tmpdir": "^1.0.0"
}
},
"path-is-absolute": {
"version": "1.0.1",
"bundled": true,
"dev": true,
"optional": true
},
"process-nextick-args": {
"version": "2.0.0",
"bundled": true,
"dev": true,
"optional": true
},
"rc": {
"version": "1.2.8",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"deep-extend": "^0.6.0",
"ini": "~1.3.0",
"minimist": "^1.2.0",
"strip-json-comments": "~2.0.1"
},
"dependencies": {
"minimist": {
"version": "1.2.0",
"bundled": true,
"dev": true,
"optional": true
}
}
},
"readable-stream": {
"version": "2.3.6",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
"isarray": "~1.0.0",
"process-nextick-args": "~2.0.0",
"safe-buffer": "~5.1.1",
"string_decoder": "~1.1.1",
"util-deprecate": "~1.0.1"
}
},
"rimraf": {
"version": "2.6.3",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"glob": "^7.1.3"
}
},
"safe-buffer": {
"version": "5.1.2",
"bundled": true,
"dev": true
},
"safer-buffer": {
"version": "2.1.2",
"bundled": true,
"dev": true,
"optional": true
},
"sax": {
"version": "1.2.4",
"bundled": true,
"dev": true,
"optional": true
},
"semver": {
"version": "5.7.0",
"bundled": true,
"dev": true,
"optional": true
},
"set-blocking": {
"version": "2.0.0",
"bundled": true,
"dev": true,
"optional": true
},
"signal-exit": {
"version": "3.0.2",
"bundled": true,
"dev": true,
"optional": true
},
"string-width": {
"version": "1.0.2",
"bundled": true,
"dev": true,
"requires": {
"code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0",
"strip-ansi": "^3.0.0"
}
},
"string_decoder": {
"version": "1.1.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"safe-buffer": "~5.1.0"
}
},
"strip-ansi": {
"version": "3.0.1",
"bundled": true,
"dev": true,
"requires": {
"ansi-regex": "^2.0.0"
}
},
"strip-json-comments": {
"version": "2.0.1",
"bundled": true,
"dev": true,
"optional": true
},
"tar": {
"version": "4.4.8",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"chownr": "^1.1.1",
"fs-minipass": "^1.2.5",
"minipass": "^2.3.4",
"minizlib": "^1.1.1",
"mkdirp": "^0.5.0",
"safe-buffer": "^5.1.2",
"yallist": "^3.0.2"
}
},
"util-deprecate": {
"version": "1.0.2",
"bundled": true,
"dev": true,
"optional": true
},
"wide-align": {
"version": "1.1.3",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"string-width": "^1.0.2 || 2"
}
},
"wrappy": {
"version": "1.0.2",
"bundled": true,
"dev": true
},
"yallist": {
"version": "3.0.3",
"bundled": true,
"dev": true
}
}
},
"fstream": { "fstream": {
"version": "1.0.11", "version": "1.0.11",
"resolved": "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz", "resolved": "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz",
@ -14185,6 +14715,7 @@
"capture-exit": "^1.2.0", "capture-exit": "^1.2.0",
"exec-sh": "^0.2.0", "exec-sh": "^0.2.0",
"fb-watchman": "^2.0.0", "fb-watchman": "^2.0.0",
"fsevents": "^1.2.3",
"micromatch": "^3.1.4", "micromatch": "^3.1.4",
"minimist": "^1.1.1", "minimist": "^1.1.1",
"walker": "~1.0.5", "walker": "~1.0.5",

View file

@ -1,7 +1,6 @@
import { shallow } from 'enzyme'; import { shallow } from 'enzyme';
import { values } from 'ramda'; import { values } from 'ramda';
import React from 'react'; import React from 'react';
import * as sinon from 'sinon';
import Home from '../../src/common/Home'; import Home from '../../src/common/Home';
describe('<Home />', () => { describe('<Home />', () => {
@ -28,11 +27,11 @@ describe('<Home />', () => {
}); });
it('resets selected server when mounted', () => { it('resets selected server when mounted', () => {
const resetSelectedServer = sinon.spy(); const resetSelectedServer = jest.fn();
expect(resetSelectedServer.called).toEqual(false); expect(resetSelectedServer).not.toHaveBeenCalled();
createComponent({ resetSelectedServer }); createComponent({ resetSelectedServer });
expect(resetSelectedServer.called).toEqual(true); expect(resetSelectedServer).toHaveBeenCalled();
}); });
it('shows link to create server when no servers exist', () => { it('shows link to create server when no servers exist', () => {

View file

@ -1,12 +1,11 @@
import React from 'react'; import React from 'react';
import { shallow } from 'enzyme'; import { shallow } from 'enzyme';
import * as sinon from 'sinon';
import createScrollToTop from '../../src/common/ScrollToTop'; import createScrollToTop from '../../src/common/ScrollToTop';
describe('<ScrollToTop />', () => { describe('<ScrollToTop />', () => {
let wrapper; let wrapper;
const window = { const window = {
scrollTo: sinon.spy(), scrollTo: jest.fn(),
}; };
beforeEach(() => { beforeEach(() => {
@ -17,13 +16,13 @@ describe('<ScrollToTop />', () => {
afterEach(() => { afterEach(() => {
wrapper.unmount(); wrapper.unmount();
window.scrollTo.resetHistory(); window.scrollTo.mockReset();
}); });
it('just renders children', () => expect(wrapper.text()).toEqual('Foobar')); it('just renders children', () => expect(wrapper.text()).toEqual('Foobar'));
it('scrolls to top when location changes', () => { it('scrolls to top when location changes', () => {
wrapper.instance().componentDidUpdate({ location: { href: 'bar' } }); wrapper.instance().componentDidUpdate({ location: { href: 'bar' } });
expect(window.scrollTo.calledOnce).toEqual(true); expect(window.scrollTo).toHaveBeenCalledTimes(1);
}); });
}); });

View file

@ -1,20 +1,18 @@
import React from 'react'; import React from 'react';
import { shallow } from 'enzyme'; import { shallow } from 'enzyme';
import { identity } from 'ramda'; import { identity } from 'ramda';
import sinon from 'sinon';
import createServerConstruct from '../../src/servers/CreateServer'; import createServerConstruct from '../../src/servers/CreateServer';
describe('<CreateServer />', () => { describe('<CreateServer />', () => {
let wrapper; let wrapper;
const ImportServersBtn = () => ''; const ImportServersBtn = () => '';
const createServerMock = sinon.fake(); const createServerMock = jest.fn();
const historyMock = { const historyMock = {
push: sinon.fake(), push: jest.fn(),
}; };
beforeEach(() => { beforeEach(() => {
createServerMock.resetHistory(); createServerMock.mockReset();
historyMock.push.resetHistory();
const CreateServer = createServerConstruct(ImportServersBtn); const CreateServer = createServerConstruct(ImportServersBtn);
@ -44,8 +42,8 @@ describe('<CreateServer />', () => {
return ''; return '';
} }); } });
expect(createServerMock.callCount).toEqual(1); expect(createServerMock).toHaveBeenCalledTimes(1);
expect(historyMock.push.callCount).toEqual(1); expect(historyMock.push).toHaveBeenCalledTimes(1);
}); });
it('updates state when inputs are changed', () => { it('updates state when inputs are changed', () => {

View file

@ -1,20 +1,19 @@
import React from 'react'; import React from 'react';
import { shallow } from 'enzyme'; import { shallow } from 'enzyme';
import sinon from 'sinon';
import { Modal, ModalBody, ModalFooter, ModalHeader } from 'reactstrap'; import { Modal, ModalBody, ModalFooter, ModalHeader } from 'reactstrap';
import DeleteServerModal from '../../src/servers/DeleteServerModal'; import DeleteServerModal from '../../src/servers/DeleteServerModal';
describe('<DeleteServerModal />', () => { describe('<DeleteServerModal />', () => {
let wrapper; let wrapper;
const deleteServerMock = sinon.fake(); const deleteServerMock = jest.fn();
const historyMock = { push: sinon.fake() }; const historyMock = { push: jest.fn() };
const toggleMock = sinon.fake(); const toggleMock = jest.fn();
const serverName = 'the_server_name'; const serverName = 'the_server_name';
beforeEach(() => { beforeEach(() => {
toggleMock.resetHistory(); deleteServerMock.mockReset();
deleteServerMock.resetHistory(); toggleMock.mockReset();
historyMock.push.resetHistory(); historyMock.push.mockReset();
wrapper = shallow( wrapper = shallow(
<DeleteServerModal <DeleteServerModal
@ -48,9 +47,9 @@ describe('<DeleteServerModal />', () => {
cancelBtn.simulate('click'); cancelBtn.simulate('click');
expect(toggleMock.callCount).toEqual(1); expect(toggleMock).toHaveBeenCalledTimes(1);
expect(deleteServerMock.callCount).toEqual(0); expect(deleteServerMock).not.toHaveBeenCalled();
expect(historyMock.push.callCount).toEqual(0); expect(historyMock.push).not.toHaveBeenCalled();
}); });
it('deletes server when clicking accept button', () => { it('deletes server when clicking accept button', () => {
@ -58,8 +57,8 @@ describe('<DeleteServerModal />', () => {
acceptBtn.simulate('click'); acceptBtn.simulate('click');
expect(toggleMock.callCount).toEqual(1); expect(toggleMock).toHaveBeenCalledTimes(1);
expect(deleteServerMock.callCount).toEqual(1); expect(deleteServerMock).toHaveBeenCalledTimes(1);
expect(historyMock.push.callCount).toEqual(1); expect(historyMock.push).toHaveBeenCalledTimes(1);
}); });
}); });

View file

@ -1,25 +1,24 @@
import React from 'react'; import React from 'react';
import sinon from 'sinon';
import { shallow } from 'enzyme'; import { shallow } from 'enzyme';
import { UncontrolledTooltip } from 'reactstrap'; import { UncontrolledTooltip } from 'reactstrap';
import importServersBtnConstruct from '../../../src/servers/helpers/ImportServersBtn'; import importServersBtnConstruct from '../../../src/servers/helpers/ImportServersBtn';
describe('<ImportServersBtn />', () => { describe('<ImportServersBtn />', () => {
let wrapper; let wrapper;
const onImportMock = sinon.fake(); const onImportMock = jest.fn();
const createServersMock = sinon.fake(); const createServersMock = jest.fn();
const serversImporterMock = { const serversImporterMock = {
importServersFromFile: sinon.fake.returns(Promise.resolve([])), importServersFromFile: jest.fn().mockResolvedValue([]),
}; };
const fileRef = { const fileRef = {
current: { click: sinon.fake() }, current: { click: jest.fn() },
}; };
beforeEach(() => { beforeEach(() => {
onImportMock.resetHistory(); onImportMock.mockReset();
createServersMock.resetHistory(); createServersMock.mockReset();
serversImporterMock.importServersFromFile.resetHistory(); serversImporterMock.importServersFromFile.mockClear();
fileRef.current.click.resetHistory(); fileRef.current.click.mockReset();
const ImportServersBtn = importServersBtnConstruct(serversImporterMock); const ImportServersBtn = importServersBtnConstruct(serversImporterMock);
@ -40,7 +39,7 @@ describe('<ImportServersBtn />', () => {
btn.simulate('click'); btn.simulate('click');
expect(fileRef.current.click.callCount).toEqual(1); expect(fileRef.current.click).toHaveBeenCalledTimes(1);
}); });
it('imports servers when file input changes', (done) => { it('imports servers when file input changes', (done) => {
@ -49,9 +48,9 @@ describe('<ImportServersBtn />', () => {
file.simulate('change', { target: { files: [ '' ] } }); file.simulate('change', { target: { files: [ '' ] } });
setImmediate(() => { setImmediate(() => {
expect(serversImporterMock.importServersFromFile.callCount).toEqual(1); expect(serversImporterMock.importServersFromFile).toHaveBeenCalledTimes(1);
expect(createServersMock.callCount).toEqual(1); expect(createServersMock).toHaveBeenCalledTimes(1);
expect(onImportMock.callCount).toEqual(1); expect(onImportMock).toHaveBeenCalledTimes(1);
done(); done();
}); });
}); });

View file

@ -1,4 +1,3 @@
import * as sinon from 'sinon';
import reducer, { import reducer, {
selectServer, selectServer,
resetSelectedServer, resetSelectedServer,
@ -31,31 +30,35 @@ describe('selectedServerReducer', () => {
id: serverId, id: serverId,
}; };
const ServersServiceMock = { const ServersServiceMock = {
findServerById: sinon.fake.returns(selectedServer), findServerById: jest.fn(() => selectedServer),
}; };
afterEach(() => { afterEach(() => {
ServersServiceMock.findServerById.resetHistory(); ServersServiceMock.findServerById.mockClear();
}); });
it('dispatches proper actions', () => { it('dispatches proper actions', () => {
const dispatch = sinon.spy(); const dispatch = jest.fn();
const expectedDispatchCalls = 2; const expectedDispatchCalls = 2;
selectServer(ServersServiceMock)(serverId)(dispatch); selectServer(ServersServiceMock)(serverId)(dispatch);
expect(dispatch.callCount).toEqual(expectedDispatchCalls); const [ firstCallArgs, secondCallArgs ] = dispatch.mock.calls;
expect(dispatch.firstCall.calledWith({ type: RESET_SHORT_URL_PARAMS })).toEqual(true);
expect(dispatch.secondCall.calledWith({ expect(dispatch).toHaveBeenCalledTimes(expectedDispatchCalls);
expect(firstCallArgs).toEqual([{ type: RESET_SHORT_URL_PARAMS }]);
expect(secondCallArgs).toEqual([
{
type: SELECT_SERVER, type: SELECT_SERVER,
selectedServer, selectedServer,
})).toEqual(true); },
]);
}); });
it('invokes dependencies', () => { it('invokes dependencies', () => {
selectServer(ServersServiceMock)(serverId)(() => {}); selectServer(ServersServiceMock)(serverId)(() => {});
expect(ServersServiceMock.findServerById.callCount).toEqual(1); expect(ServersServiceMock.findServerById).toHaveBeenCalledTimes(1);
}); });
}); });
}); });

View file

@ -1,4 +1,3 @@
import * as sinon from 'sinon';
import { values } from 'ramda'; import { values } from 'ramda';
import reducer, { import reducer, {
createServer, createServer,
@ -15,10 +14,10 @@ describe('serverReducer', () => {
}; };
const expectedFetchServersResult = { type: FETCH_SERVERS, payload }; const expectedFetchServersResult = { type: FETCH_SERVERS, payload };
const ServersServiceMock = { const ServersServiceMock = {
listServers: sinon.fake.returns(payload), listServers: jest.fn(() => payload),
createServer: sinon.fake(), createServer: jest.fn(),
deleteServer: sinon.fake(), deleteServer: jest.fn(),
createServers: sinon.fake(), createServers: jest.fn(),
}; };
describe('reducer', () => { describe('reducer', () => {
@ -28,10 +27,10 @@ describe('serverReducer', () => {
describe('action creators', () => { describe('action creators', () => {
beforeEach(() => { beforeEach(() => {
ServersServiceMock.listServers.resetHistory(); ServersServiceMock.listServers.mockClear();
ServersServiceMock.createServer.resetHistory(); ServersServiceMock.createServer.mockReset();
ServersServiceMock.deleteServer.resetHistory(); ServersServiceMock.deleteServer.mockReset();
ServersServiceMock.createServers.resetHistory(); ServersServiceMock.createServers.mockReset();
}); });
describe('listServers', () => { describe('listServers', () => {
@ -39,10 +38,10 @@ describe('serverReducer', () => {
const result = listServers(ServersServiceMock)(); const result = listServers(ServersServiceMock)();
expect(result).toEqual(expectedFetchServersResult); expect(result).toEqual(expectedFetchServersResult);
expect(ServersServiceMock.listServers.calledOnce).toEqual(true); expect(ServersServiceMock.listServers).toHaveBeenCalledTimes(1);
expect(ServersServiceMock.createServer.called).toEqual(false); expect(ServersServiceMock.createServer).not.toHaveBeenCalled();
expect(ServersServiceMock.deleteServer.called).toEqual(false); expect(ServersServiceMock.deleteServer).not.toHaveBeenCalled();
expect(ServersServiceMock.createServers.called).toEqual(false); expect(ServersServiceMock.createServers).not.toHaveBeenCalled();
}); });
}); });
@ -52,11 +51,11 @@ describe('serverReducer', () => {
const result = createServer(ServersServiceMock, () => expectedFetchServersResult)(serverToCreate); const result = createServer(ServersServiceMock, () => expectedFetchServersResult)(serverToCreate);
expect(result).toEqual(expectedFetchServersResult); expect(result).toEqual(expectedFetchServersResult);
expect(ServersServiceMock.createServer.calledOnce).toEqual(true); expect(ServersServiceMock.createServer).toHaveBeenCalledTimes(1);
expect(ServersServiceMock.createServer.firstCall.calledWith(serverToCreate)).toEqual(true); expect(ServersServiceMock.createServer.mock.calls[0]).toEqual([ serverToCreate ]);
expect(ServersServiceMock.listServers.called).toEqual(false); expect(ServersServiceMock.listServers).not.toHaveBeenCalled();
expect(ServersServiceMock.deleteServer.called).toEqual(false); expect(ServersServiceMock.deleteServer).not.toHaveBeenCalled();
expect(ServersServiceMock.createServers.called).toEqual(false); expect(ServersServiceMock.createServers).not.toHaveBeenCalled();
}); });
}); });
@ -66,11 +65,11 @@ describe('serverReducer', () => {
const result = deleteServer(ServersServiceMock, () => expectedFetchServersResult)(serverToDelete); const result = deleteServer(ServersServiceMock, () => expectedFetchServersResult)(serverToDelete);
expect(result).toEqual(expectedFetchServersResult); expect(result).toEqual(expectedFetchServersResult);
expect(ServersServiceMock.listServers.called).toEqual(false); expect(ServersServiceMock.listServers).not.toHaveBeenCalled();
expect(ServersServiceMock.createServer.called).toEqual(false); expect(ServersServiceMock.createServer).not.toHaveBeenCalled();
expect(ServersServiceMock.createServers.called).toEqual(false); expect(ServersServiceMock.createServers).not.toHaveBeenCalled();
expect(ServersServiceMock.deleteServer.calledOnce).toEqual(true); expect(ServersServiceMock.deleteServer).toHaveBeenCalledTimes(1);
expect(ServersServiceMock.deleteServer.firstCall.calledWith(serverToDelete)).toEqual(true); expect(ServersServiceMock.deleteServer.mock.calls[0]).toEqual([ serverToDelete ]);
}); });
}); });
@ -80,11 +79,11 @@ describe('serverReducer', () => {
const result = createServers(ServersServiceMock, () => expectedFetchServersResult)(serversToCreate); const result = createServers(ServersServiceMock, () => expectedFetchServersResult)(serversToCreate);
expect(result).toEqual(expectedFetchServersResult); expect(result).toEqual(expectedFetchServersResult);
expect(ServersServiceMock.listServers.called).toEqual(false); expect(ServersServiceMock.listServers).not.toHaveBeenCalled();
expect(ServersServiceMock.createServer.called).toEqual(false); expect(ServersServiceMock.createServer).not.toHaveBeenCalled();
expect(ServersServiceMock.createServers.calledOnce).toEqual(true); expect(ServersServiceMock.createServers).toHaveBeenCalledTimes(1);
expect(ServersServiceMock.createServers.firstCall.calledWith(serversToCreate)).toEqual(true); expect(ServersServiceMock.createServers.mock.calls[0]).toEqual([ serversToCreate ]);
expect(ServersServiceMock.deleteServer.called).toEqual(false); expect(ServersServiceMock.deleteServer).not.toHaveBeenCalled();
}); });
}); });
}); });

View file

@ -1,26 +1,25 @@
import sinon from 'sinon';
import ServersExporter from '../../../src/servers/services/ServersExporter'; import ServersExporter from '../../../src/servers/services/ServersExporter';
describe('ServersExporter', () => { describe('ServersExporter', () => {
const createLinkMock = () => ({ const createLinkMock = () => ({
setAttribute: sinon.fake(), setAttribute: jest.fn(),
click: sinon.fake(), click: jest.fn(),
style: {}, style: {},
}); });
const createWindowMock = (isIe10 = true) => ({ const createWindowMock = (isIe10 = true) => ({
navigator: { navigator: {
msSaveBlob: isIe10 ? sinon.fake() : undefined, msSaveBlob: isIe10 ? jest.fn() : undefined,
}, },
document: { document: {
createElement: sinon.fake.returns(createLinkMock()), createElement: jest.fn(() => createLinkMock()),
body: { body: {
appendChild: sinon.fake(), appendChild: jest.fn(),
removeChild: sinon.fake(), removeChild: jest.fn(),
}, },
}, },
}); });
const serversServiceMock = { const serversServiceMock = {
listServers: sinon.fake.returns({ listServers: jest.fn(() => ({
abc123: { abc123: {
id: 'abc123', id: 'abc123',
name: 'foo', name: 'foo',
@ -29,10 +28,16 @@ describe('ServersExporter', () => {
id: 'def456', id: 'def456',
name: 'bar', name: 'bar',
}, },
}), })),
}; };
const createCsvjsonMock = (throwError = false) => ({ const createCsvjsonMock = (throwError = false) => ({
toCSV: throwError ? sinon.fake.throws('') : sinon.fake.returns(''), toCSV: jest.fn(() => {
if (throwError) {
throw new Error('');
}
return '';
}),
}); });
describe('exportServers', () => { describe('exportServers', () => {
@ -40,10 +45,10 @@ describe('ServersExporter', () => {
beforeEach(() => { beforeEach(() => {
originalConsole = global.console; originalConsole = global.console;
global.console = { error: sinon.fake() }; global.console = { error: jest.fn() };
global.Blob = class Blob {}; global.Blob = class Blob {};
global.URL = { createObjectURL: () => '' }; global.URL = { createObjectURL: () => '' };
serversServiceMock.listServers.resetHistory(); serversServiceMock.listServers.mockReset();
}); });
afterEach(() => { afterEach(() => {
global.console = originalConsole; global.console = originalConsole;
@ -59,8 +64,8 @@ describe('ServersExporter', () => {
exporter.exportServers(); exporter.exportServers();
expect(global.console.error.callCount).toEqual(1); expect(global.console.error).toHaveBeenCalledTimes(1);
expect(csvjsonMock.toCSV.callCount).toEqual(1); expect(csvjsonMock.toCSV).toHaveBeenCalledTimes(1);
}); });
it('makes use of msSaveBlob API when available', () => { it('makes use of msSaveBlob API when available', () => {
@ -73,9 +78,9 @@ describe('ServersExporter', () => {
exporter.exportServers(); exporter.exportServers();
expect(serversServiceMock.listServers.callCount).toEqual(1); expect(serversServiceMock.listServers).toHaveBeenCalledTimes(1);
expect(windowMock.navigator.msSaveBlob.callCount).toEqual(1); expect(windowMock.navigator.msSaveBlob).toHaveBeenCalledTimes(1);
expect(windowMock.document.createElement.callCount).toEqual(0); expect(windowMock.document.createElement).not.toHaveBeenCalled();
}); });
it('makes use of download link API when available', () => { it('makes use of download link API when available', () => {
@ -88,10 +93,10 @@ describe('ServersExporter', () => {
exporter.exportServers(); exporter.exportServers();
expect(serversServiceMock.listServers.callCount).toEqual(1); expect(serversServiceMock.listServers).toHaveBeenCalledTimes(1);
expect(windowMock.document.createElement.callCount).toEqual(1); expect(windowMock.document.createElement).toHaveBeenCalledTimes(1);
expect(windowMock.document.body.appendChild.callCount).toEqual(1); expect(windowMock.document.body.appendChild).toHaveBeenCalledTimes(1);
expect(windowMock.document.body.removeChild.callCount).toEqual(1); expect(windowMock.document.body.removeChild).toHaveBeenCalledTimes(1);
}); });
}); });
}); });

View file

@ -1,14 +1,13 @@
import sinon from 'sinon';
import ServersImporter from '../../../src/servers/services/ServersImporter'; import ServersImporter from '../../../src/servers/services/ServersImporter';
describe('ServersImporter', () => { describe('ServersImporter', () => {
const servers = [{ name: 'foo' }, { name: 'bar' }]; const servers = [{ name: 'foo' }, { name: 'bar' }];
const csvjsonMock = { const csvjsonMock = {
toObject: sinon.fake.returns(servers), toObject: jest.fn(() => servers),
}; };
const importer = new ServersImporter(csvjsonMock); const importer = new ServersImporter(csvjsonMock);
beforeEach(() => csvjsonMock.toObject.resetHistory()); beforeEach(() => csvjsonMock.toObject.mockClear());
describe('importServersFromFile', () => { describe('importServersFromFile', () => {
it('rejects with error if no file was provided', async () => { it('rejects with error if no file was provided', async () => {
@ -28,7 +27,7 @@ describe('ServersImporter', () => {
}); });
it('reads file when a CSV is provided', async () => { it('reads file when a CSV is provided', async () => {
const readAsText = sinon.fake.returns(''); const readAsText = jest.fn(() => '');
global.FileReader = class FileReader { global.FileReader = class FileReader {
constructor() { constructor() {
@ -40,8 +39,8 @@ describe('ServersImporter', () => {
await importer.importServersFromFile({ type: 'text/csv' }); await importer.importServersFromFile({ type: 'text/csv' });
expect(readAsText.callCount).toEqual(1); expect(readAsText).toHaveBeenCalledTimes(1);
expect(csvjsonMock.toObject.callCount).toEqual(1); expect(csvjsonMock.toObject).toHaveBeenCalledTimes(1);
}); });
}); });
}); });

View file

@ -1,4 +1,3 @@
import sinon from 'sinon';
import { last } from 'ramda'; import { last } from 'ramda';
import ServersService from '../../../src/servers/services/ServersService'; import ServersService from '../../../src/servers/services/ServersService';
@ -8,8 +7,8 @@ describe('ServersService', () => {
def456: { id: 'def456' }, def456: { id: 'def456' },
}; };
const createStorageMock = (returnValue) => ({ const createStorageMock = (returnValue) => ({
set: sinon.fake(), set: jest.fn(),
get: sinon.fake.returns(returnValue), get: jest.fn(() => returnValue),
}); });
describe('listServers', () => { describe('listServers', () => {
@ -20,8 +19,8 @@ describe('ServersService', () => {
const result = service.listServers(); const result = service.listServers();
expect(result).toEqual({}); expect(result).toEqual({});
expect(storageMock.get.callCount).toEqual(1); expect(storageMock.get).toHaveBeenCalledTimes(1);
expect(storageMock.set.callCount).toEqual(0); expect(storageMock.set).not.toHaveBeenCalled();
}); });
it('returns value from storage when found', () => { it('returns value from storage when found', () => {
@ -31,8 +30,8 @@ describe('ServersService', () => {
const result = service.listServers(); const result = service.listServers();
expect(result).toEqual(servers); expect(result).toEqual(servers);
expect(storageMock.get.callCount).toEqual(1); expect(storageMock.get).toHaveBeenCalledTimes(1);
expect(storageMock.set.callCount).toEqual(0); expect(storageMock.set).not.toHaveBeenCalled();
}); });
}); });
@ -44,8 +43,8 @@ describe('ServersService', () => {
const result = service.findServerById('ghi789'); const result = service.findServerById('ghi789');
expect(result).toBeUndefined(); expect(result).toBeUndefined();
expect(storageMock.get.callCount).toEqual(1); expect(storageMock.get).toHaveBeenCalledTimes(1);
expect(storageMock.set.callCount).toEqual(0); expect(storageMock.set).not.toHaveBeenCalled();
}); });
it('returns server from list when found', () => { it('returns server from list when found', () => {
@ -55,8 +54,8 @@ describe('ServersService', () => {
const result = service.findServerById('abc123'); const result = service.findServerById('abc123');
expect(result).toEqual({ id: 'abc123' }); expect(result).toEqual({ id: 'abc123' });
expect(storageMock.get.callCount).toEqual(1); expect(storageMock.get).toHaveBeenCalledTimes(1);
expect(storageMock.set.callCount).toEqual(0); expect(storageMock.set).not.toHaveBeenCalled();
}); });
}); });
@ -67,9 +66,12 @@ describe('ServersService', () => {
service.createServer({ id: 'ghi789' }); service.createServer({ id: 'ghi789' });
expect(storageMock.get.callCount).toEqual(1); expect(storageMock.get).toHaveBeenCalledTimes(1);
expect(storageMock.set.callCount).toEqual(1); expect(storageMock.set).toHaveBeenCalledTimes(1);
expect(last(storageMock.set.lastCall.args)).toEqual({
const setLastCallLastArg = last(last(storageMock.set.mock.calls));
expect(setLastCallLastArg).toEqual({
abc123: { id: 'abc123' }, abc123: { id: 'abc123' },
def456: { id: 'def456' }, def456: { id: 'def456' },
ghi789: { id: 'ghi789' }, ghi789: { id: 'ghi789' },
@ -84,9 +86,12 @@ describe('ServersService', () => {
service.createServers([{ id: 'ghi789' }, { id: 'jkl123' }]); service.createServers([{ id: 'ghi789' }, { id: 'jkl123' }]);
expect(storageMock.get.callCount).toEqual(1); expect(storageMock.get).toHaveBeenCalledTimes(1);
expect(storageMock.set.callCount).toEqual(1); expect(storageMock.set).toHaveBeenCalledTimes(1);
expect(last(storageMock.set.lastCall.args)).toEqual({
const setLastCallLastArg = last(last(storageMock.set.mock.calls));
expect(setLastCallLastArg).toEqual({
abc123: { id: 'abc123' }, abc123: { id: 'abc123' },
def456: { id: 'def456' }, def456: { id: 'def456' },
ghi789: { id: 'ghi789' }, ghi789: { id: 'ghi789' },
@ -102,9 +107,12 @@ describe('ServersService', () => {
service.deleteServer({ id: 'abc123' }); service.deleteServer({ id: 'abc123' });
expect(storageMock.get.callCount).toEqual(1); expect(storageMock.get).toHaveBeenCalledTimes(1);
expect(storageMock.set.callCount).toEqual(1); expect(storageMock.set).toHaveBeenCalledTimes(1);
expect(last(storageMock.set.lastCall.args)).toEqual({
const setLastCallLastArg = last(last(storageMock.set.mock.calls));
expect(setLastCallLastArg).toEqual({
def456: { id: 'def456' }, def456: { id: 'def456' },
}); });
}); });