diff --git a/index.js b/index.js index 4a5f298..98a4c0f 100644 --- a/index.js +++ b/index.js @@ -50,6 +50,7 @@ function mapping(datadir, url) { var pathname = info.pathname.replace(/^\/+/g, ''); var scene = (info.query && info.query.__scene || '').trim(); scene = scene || 'default'; + scene = scene.replace(/\.(js|json)$/, ''); var m = / \(([^\)]+)\.(?:js|json)\)$/.exec(scene); if (m) { scene = m[1]; @@ -115,7 +116,7 @@ function load(filepath, ctx) { } function findAllScenes(datadir, url) { - var scenes = []; + var scenes = {}; var info = urlparse(url, true); var pathname = info.pathname.replace(/^\/+/g, ''); var dir = path.join(datadir, pathname); @@ -145,20 +146,19 @@ function findAllScenes(datadir, url) { return false; }); - scenes = filepaths.map(function (filepath) { + filepaths.map(function (filepath) { var filename = path.basename(filepath); - var defaultName = filename.substring(0, filename.lastIndexOf('.')); - var data; + // use filename as default name + var name = filename.substring(0, filename.lastIndexOf('.')); + try { - data = require(filepath); - } catch (_) { - return defaultName; - } + var data = require(filepath); + if (data && data.__name) { + name = data.__name; + } + } catch (_) {} - if (!data.__name) { - return defaultName; - } - return data.__name + ' (' + filename + ')'; + scenes[filename] = name; }); } return scenes; diff --git a/test/index.test.js b/test/index.test.js index 7a3a491..1ceda9a 100644 --- a/test/index.test.js +++ b/test/index.test.js @@ -72,6 +72,12 @@ describe('urlmock', function () { path.join(datadir, 'foo', 'default.json'), ]); + var paths = urlmock.mapping(datadir, '/foo?__scene=default.js'); + assert.deepEqual(paths, [ + path.join(datadir, 'foo', 'default.js'), + path.join(datadir, 'foo', 'default.json'), + ]); + var paths = urlmock.mapping(datadir, '/foo?__scene=%20%20%20'); assert.deepEqual(paths, [ path.join(datadir, 'foo', 'default.js'), @@ -331,27 +337,49 @@ describe('urlmock', function () { describe('findAllScenes()', function () { it('should find out all exists scenes', function () { var data = urlmock.findAllScenes(datadir, '/'); - assert.deepEqual(data, [ 'admin', 'array', 'data_with_ctx', 'default', 'fail', 'jsarray', 'logined' ]); + assert.deepEqual(data, { + 'admin.js': 'admin', + 'array.json': 'array', + 'data_with_ctx.js': 'data_with_ctx', + 'default.js': 'default', + 'fail.js': 'fail', + 'jsarray.js': 'jsarray', + 'logined.js': 'logined' + }); var data = urlmock.findAllScenes(datadir, '/users'); - assert.deepEqual(data, [ 'other', 'second' ]); + assert.deepEqual(data, { + 'other.js': 'other', + 'second.js': 'second' + }); var data = urlmock.findAllScenes(datadir, '/users.'); - assert.deepEqual(data, []); + assert.deepEqual(data, {}); var data = urlmock.findAllScenes(datadir, '/users.html'); - assert.deepEqual(data, [ 'other', 'second' ]); + assert.deepEqual(data, { + 'other.js': 'other', + 'second.js': 'second' + }); var data = urlmock.findAllScenes(datadir, '/users/123'); - assert.deepEqual(data, [ 'one' ]); + assert.deepEqual(data, { + 'one.js': 'one' + }); var data = urlmock.findAllScenes(datadir, '/users/123.html'); - assert.deepEqual(data, [ 'default' ]); + assert.deepEqual(data, { + 'default.js': 'default' + }); }); it('should support `__name` in mock data file', function () { var data = urlmock.findAllScenes(datadir, '/profile'); - assert.deepEqual(data, ['normal user (default.js)', 'lucy', '马 yun yun (ma.js)']); + assert.deepEqual(data, { + 'default.js': 'normal user', + 'lucy.js': 'lucy', + 'ma.js': '马 yun yun' + }); }); }); });