WXL
4 天以前 3bd962a6d7f61239c020e2dbbeb7341e5b842dd1
node_modules/resolve/test/mock.js
@@ -239,7 +239,7 @@
});
test('readPackage', function (t) {
    t.plan(3);
    t.plan(4);
    var files = {};
    files[path.resolve('/foo/node_modules/bar/something-else.js')] = 'beep';
@@ -281,14 +281,14 @@
        });
    });
    var readPackage = function (readFile, file, cb) {
    function readPackage(readFile, file, cb) {
        var barPackage = path.join('bar', 'package.json');
        if (file.slice(-barPackage.length) === barPackage) {
            cb(null, { main: './something-else.js' });
        } else {
            cb(null, JSON.parse(files[path.resolve(file)]));
        }
    };
    }
    t.test('with readPackage', function (st) {
        st.plan(3);
@@ -312,4 +312,42 @@
            st.throws(function () { throw err; }, TypeError, 'errors when both readFile and readPackage are provided');
        });
    });
    t.test('readPackage error in loadpkg does not invoke callback twice', function (st) {
        st.plan(1);
        var callCount = 0;
        var readPackageError = new Error('read package error');
        function failReadPackage(rf, file, cb) {
            cb(readPackageError);
        }
        var relFiles = {};
        relFiles[path.resolve('/foo/bar/baz.js')] = 'beep';
        relFiles[path.resolve('/foo/bar/package.json')] = '{}';
        var relDirs = {};
        relDirs[path.resolve('/foo/bar')] = true;
        resolve('./baz', {
            basedir: path.resolve('/foo/bar'),
            isFile: function (file, cb) {
                cb(null, Object.prototype.hasOwnProperty.call(relFiles, path.resolve(file)));
            },
            isDirectory: function (dir, cb) {
                cb(null, !!relDirs[path.resolve(dir)]);
            },
            readPackage: failReadPackage,
            realpath: function (file, cb) {
                cb(null, file);
            }
        }, function () {
            callCount += 1;
        });
        setTimeout(function () {
            st.equal(callCount, 1, 'callback is invoked exactly once');
        }, 50);
    });
});