From 352484981bf7fbf4e65ff5f7d5c4cabaea522d54 Mon Sep 17 00:00:00 2001 From: Frank Schmid Date: Wed, 7 Feb 2018 14:57:32 +0100 Subject: [PATCH] Test new behavior in wpwatch unit tests --- tests/webpack.mock.js | 12 +++++++++--- tests/wpwatch.test.js | 15 +++++++++------ 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/tests/webpack.mock.js b/tests/webpack.mock.js index 1939f3825..68b612da8 100644 --- a/tests/webpack.mock.js +++ b/tests/webpack.mock.js @@ -12,17 +12,23 @@ const StatsMock = () => ({ toString: sinon.stub().returns('testStats'), }); -const CompilerMock = (sandbox, statsMock) => ({ +const WatchMock = sandbox => ({ + close: sandbox.stub().callsFake(cb => cb()) +}); + +const CompilerMock = (sandbox, statsMock, watchMock) => ({ run: sandbox.stub().yields(null, statsMock), - watch: sandbox.stub().yields(null, statsMock) + watch: sandbox.stub().returns(watchMock).yields(null, statsMock) }); const webpackMock = sandbox => { const statsMock = StatsMock(sandbox); - const compilerMock = CompilerMock(sandbox, statsMock); + const watchMock = WatchMock(sandbox); + const compilerMock = CompilerMock(sandbox, statsMock, watchMock); const mock = sinon.stub().returns(compilerMock); mock.compilerMock = compilerMock; mock.statsMock = statsMock; + mock.watchMock = watchMock; return mock; }; diff --git a/tests/wpwatch.test.js b/tests/wpwatch.test.js index 4645c0437..3f278226e 100644 --- a/tests/wpwatch.test.js +++ b/tests/wpwatch.test.js @@ -145,23 +145,26 @@ describe('wpwatch', function() { it('should call callback on subsequent runs', () => { const wpwatch = module.wpwatch.bind(module); let watchCallbackSpy; - webpackMock.compilerMock.watch.callsFake((options, cb) => { + webpackMock.compilerMock.watch.onFirstCall().callsFake((options, cb) => { // We'll spy the callback registered for watch watchCallbackSpy = sandbox.spy(cb); // Schedule second call after 2 seconds setTimeout(() => { - watchCallbackSpy(null, { call: 2 }); + process.nextTick(() => watchCallbackSpy(null, { call: 2, hash: '2' })); }, 2000); - process.nextTick(() => watchCallbackSpy(null, { call: 1 })); + process.nextTick(() => watchCallbackSpy(null, { call: 1, hash: '1' })); + return webpackMock.watchMock; }); spawnStub.resolves(); return expect(wpwatch()).to.be.fulfilled .then(() => BbPromise.delay(3000)) .then(() => BbPromise.join( - expect(spawnStub).to.not.have.been.called, - expect(webpackMock.compilerMock.watch).to.have.been.calledOnce, + expect(spawnStub).to.have.been.calledOnce, + expect(spawnStub).to.have.been.calledWithExactly('webpack:compile:watch'), + expect(webpackMock.compilerMock.watch).to.have.been.calledTwice, + expect(webpackMock.watchMock.close).to.have.been.calledOnce, expect(watchCallbackSpy).to.have.been.calledTwice )); }); @@ -181,7 +184,7 @@ describe('wpwatch', function() { // Ignore the exception. The spy will record it. } }, 2000); - process.nextTick(() => watchCallbackSpy(null, { call: 1 })); + process.nextTick(() => watchCallbackSpy(null, { call: 3, hash: '3' })); }); spawnStub.resolves();