From 663c592e75e33be3a001f7aac3746c0f4bb540de Mon Sep 17 00:00:00 2001 From: Silke Jaenichen Date: Wed, 2 Mar 2016 14:26:17 +0100 Subject: [PATCH] URL Wildcards for hook matching #67. --- lib/hooks.coffee | 18 ++++++++++++------ test/unit/hooks-test.coffee | 8 ++++++++ 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/lib/hooks.coffee b/lib/hooks.coffee index fb0baeb..9027ccf 100644 --- a/lib/hooks.coffee +++ b/lib/hooks.coffee @@ -1,5 +1,4 @@ async = require 'async' -_ = require 'underscore' class Hooks constructor: () -> @@ -49,23 +48,30 @@ class Hooks callback(err) runBefore: (test, callback) => - return callback() unless (@beforeHooks[test.name] or @beforeEachHooks) + beforeHook = @getMatchingHook @beforeHooks, test.name + return callback() unless (beforeHook or @beforeEachHooks) - hooks = @beforeEachHooks.concat(@beforeHooks[test.name] ? []) + hooks = @beforeEachHooks.concat(beforeHook ? []) async.eachSeries hooks, (hook, callback) -> hook test, callback , callback runAfter: (test, callback) => - return callback() unless (@afterHooks[test.name] or @afterEachHooks) + afterHook = @getMatchingHook @afterHooks, test.name + return callback() unless (afterHook or @afterEachHooks) - hooks = (@afterHooks[test.name] ? []).concat(@afterEachHooks) + hooks = (afterHook ? []).concat(@afterEachHooks) async.eachSeries hooks, (hook, callback) -> hook test, callback , callback hasName: (name) => - _.has(@beforeHooks, name) || _.has(@afterHooks, name) + (@getMatchingHook @beforeHooks, name) || (@getMatchingHook @afterHooks, name) + + getMatchingHook: (hooks, name) => + for key,value of hooks + if name.match key + return value module.exports = new Hooks() diff --git a/test/unit/hooks-test.coffee b/test/unit/hooks-test.coffee index 8ff5617..76654fb 100644 --- a/test/unit/hooks-test.coffee +++ b/test/unit/hooks-test.coffee @@ -168,6 +168,14 @@ describe 'Hooks', () -> hooks.beforeHooks = {} + it 'should return true if test name matches regular expression hook', -> + hooks.beforeHooks = + 'GET /.* -> [200|404]': (test, done) -> + done() + + assert.ok hooks.hasName 'GET /users -> 200' + hooks.beforeHooks = {} + it 'should return true if in after hooks', -> hooks.afterHooks = foo: (test, done) ->