diff --git a/lib/Approvals.js b/lib/Approvals.js index 9656cedc..8029cfb5 100644 --- a/lib/Approvals.js +++ b/lib/Approvals.js @@ -115,9 +115,11 @@ exports.verify = function (dirName, testName, data, reporters) { var options = exports.options; var namer = new ManualNamer(dirName, testName); - var reporter = ReporterFactory.loadReporter(reporters || options.reporters); + var reporterFactory = function() { + return ReporterFactory.loadReporter(reporters || options.reporters); + }; var writer = new StringWriter(options, data); - FileApprover.verify(namer, writer, reporter); + FileApprover.verify(namer, writer, reporterFactory); }; exports.verifyAsJSON = function(dirName, testName, data, reporters) { diff --git a/lib/FileApprover.js b/lib/FileApprover.js index d5d5d4b7..80577c76 100644 --- a/lib/FileApprover.js +++ b/lib/FileApprover.js @@ -2,7 +2,7 @@ var fs = require('fs'); var autils = require('./AUtils'); var FileApprover = function () { }; -FileApprover.verify = function (namer, writer, reporter, options) { +FileApprover.verify = function (namer, writer, reporterFactory, options) { if (!namer) { throw "missing argument 'namer'"; @@ -10,8 +10,8 @@ FileApprover.verify = function (namer, writer, reporter, options) { if (!writer) { throw "missing argument 'writer'"; } - if (!reporter) { - throw "missing argument 'reporter'"; + if (!reporterFactory) { + throw "missing argument 'reporterFactory'"; } var stripBOM = options && options.stripBOM; @@ -31,6 +31,7 @@ FileApprover.verify = function (namer, writer, reporter, options) { } var throwReporterError = function (msg) { + var reporter = reporterFactory(); var reporterError; try { reporter.report(approvedFileName, receivedFileName); diff --git a/lib/Providers/BeforeEachVerifierBase.js b/lib/Providers/BeforeEachVerifierBase.js index 486b40e0..0a75e475 100644 --- a/lib/Providers/BeforeEachVerifierBase.js +++ b/lib/Providers/BeforeEachVerifierBase.js @@ -46,10 +46,12 @@ module.exports = function (Namer, usageSample, options, dirName) { this.verify = function (data, optionalReporterOverride) { - var reporter = approvalsExtras.getCurrentReporter(optionalReporterOverride); + var reporterFactory = function() { + return approvalsExtras.getCurrentReporter(optionalReporterOverride); + }; var writer = new StringWriter(options, data); - FileApprover.verify(namer, writer, reporter); + FileApprover.verify(namer, writer, reporterFactory); }; this.verifyAsJSON = function (data, optionalReporterOverride) { diff --git a/test/FileApproverTests.js b/test/FileApproverTests.js index 55f0270e..59375586 100644 --- a/test/FileApproverTests.js +++ b/test/FileApproverTests.js @@ -22,7 +22,7 @@ describe('FileApprover', function () { describe("when two files match", function(){ var namer; - var reporter; + var reporterFactory; var writer; var config = { appendEOL: false }; @@ -31,15 +31,17 @@ describe('FileApprover', function () { var fileName = "FileApprover.should_verify_two_files_match"; namer = new Namer(dir, fileName); writer = new StringWriter(config, "HELLO!"); - reporter = new ShouldFailCustomReporter(); + reporterFactory = function() { + return new ShouldFailCustomReporter(); + }; }); it('should verify two files match', function () { - FileApprover.verify(namer, writer, reporter); + FileApprover.verify(namer, writer, reporterFactory); }); it('should remove the received file', function () { - FileApprover.verify(namer, writer, reporter); + FileApprover.verify(namer, writer, reporterFactory); var receivedFileName = namer.getReceivedFile(writer.getFileExtension()); assert.ok(!fs.existsSync(receivedFileName), "Received File should be deleted"); @@ -54,7 +56,7 @@ describe('FileApprover', function () { done(); }); - FileApprover.verify(namer, writer, reporter); + FileApprover.verify(namer, writer, reporterFactory); }); it('should fail the approver if the writer gives something different', function () { @@ -62,7 +64,7 @@ describe('FileApprover', function () { writer = new StringWriter(config, "BYE"); assert.throws(function() { - FileApprover.verify(namer, writer, reporter); + FileApprover.verify(namer, writer, reporterFactory); }); });