From 9f826cbe293a01142acc9cab9a047111635e1395 Mon Sep 17 00:00:00 2001 From: Shane Osbourne Date: Tue, 26 May 2015 09:31:21 +0100 Subject: [PATCH] fix(file-watcher): defer to default callback should `fn` property be absent from file watching object literals - fixes #643 --- lib/file-watcher.js | 3 +++ test/specs/files/files.watching.js | 39 ++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/lib/file-watcher.js b/lib/file-watcher.js index 256e99b80..4555ccd66 100644 --- a/lib/file-watcher.js +++ b/lib/file-watcher.js @@ -44,6 +44,9 @@ module.exports.plugin = function (bs) { if (jsItem.objs.length) { jsItem.objs.forEach(function (item) { + if (!_.isFunction(item.fn)) { + item.fn = fn; + } var watcher = watch(item.match, item.options || defaultWatchOptions, item.fn.bind(bs.publicInstance)); if (!map[namespace]) { map[namespace] = { diff --git a/test/specs/files/files.watching.js b/test/specs/files/files.watching.js index 8db992cca..d530f2d84 100644 --- a/test/specs/files/files.watching.js +++ b/test/specs/files/files.watching.js @@ -7,6 +7,7 @@ var merge = require("../../../lib/cli/cli-options").merge; var events = require("events"); var path = require("path"); +var sinon = require("sinon"); var assert = require("chai").assert; var outpath = path.join(__dirname, "../../fixtures"); @@ -91,4 +92,42 @@ describe("File Watcher Module", function () { bs.watchers.core.watchers[0]._events.all("change", tempFile); }); }); + it("should allow obj literal with match & options, but without callback fn", function (done) { + + var tempFile = path.join(outpath, "watch-func.txt"); + + // assert: it works if it calls done + var bs = browserSync.create(); + + bs.init({ + files: [ + { + options: { + ignoreInitial: true + }, + match: tempFile + } + ], + ui: false, + online: false, + logSnippet: false, + logLevel: "silent" + }, function (err, bs) { + + var spy = sinon.spy(bs.events, "emit"); + + bs.watchers.core.watchers[0]._events.all("change", tempFile); + + var callArgs = spy.getCall(0).args; + + assert.equal(callArgs[0], "file:changed"); + assert.equal(callArgs[1].basename, "watch-func.txt"); + assert.equal(callArgs[1].event, "change"); + assert.equal(callArgs[1].namespace, "core"); + + bs.cleanup(); + + done(); + }); + }); });