1var fs = require('graceful-fs') 2var path = require('path') 3 4var mkdirp = require('mkdirp') 5var test = require('tap').test 6 7var common = require('../common-tap.js') 8 9var pkg = common.pkg 10 11var EXEC_OPTS = { cwd: pkg } 12 13var parentPkg = { 14 name: 'parent-package', 15 version: '0.0.0', 16 dependencies: { 17 'child-package-a': 'file:./child-package-a', 18 'child-package-b': 'file:./child-package-b' 19 } 20} 21 22var childPkgA = { 23 name: 'child-package-a', 24 version: '0.0.0', 25 bin: 'index.js' 26} 27 28var childPkgB = { 29 name: 'child-package-b', 30 version: '0.0.0', 31 dependencies: { 32 'grandchild-package': 'file:../grandchild-package' 33 } 34} 35 36var grandchildPkg = { 37 name: 'grandchild-package', 38 version: '0.0.0', 39 bin: null 40} 41 42var pkgs = [childPkgA, childPkgB, grandchildPkg] 43 44test('setup', t => { 45 mkdirp.sync(pkg) 46 fs.writeFileSync( 47 path.join(pkg, 'package.json'), 48 JSON.stringify(parentPkg, null, 2) 49 ) 50 pkgs.forEach(function (json) { 51 var pkgPath = path.resolve(pkg, json.name) 52 mkdirp.sync(pkgPath) 53 fs.writeFileSync( 54 path.join(pkgPath, 'package.json'), 55 JSON.stringify(json, null, 2) 56 ) 57 }) 58 fs.writeFileSync( 59 path.join(pkg, childPkgA.name, 'index.js'), 60 '' 61 ) 62 t.end() 63}) 64 65test('the grandchild has bin:null', function (t) { 66 common.npm(['install'], EXEC_OPTS, function (err, code, stdout, stderr) { 67 t.ifErr(err, 'npm link finished without error') 68 t.equal(code, 0, 'exited ok') 69 t.ok(stdout, 'output indicating success') 70 t.notOk(stderr, 'no output stderr') 71 t.end() 72 }) 73}) 74