diff --git a/app/helpers/npm.js b/app/helpers/npm.js index 385ec1354a67c415476d15e0a020ce9649bd9006..1dbbb744db21e13b6fc56486d3b8bdcc626ebcb4 100644 --- a/app/helpers/npm.js +++ b/app/helpers/npm.js @@ -23,7 +23,7 @@ function extractDependencies(packageJson) { const depTypes = ['dependencies', 'devDependencies']; return depTypes.reduce((allDeps, depType) => { // loop through each dependency within a type - const depNames = Object.keys(packageJson[depType]) || []; + const depNames = packageJson[depType] ? Object.keys(packageJson[depType]) : []; return allDeps.concat(depNames.map(depName => ({ depType, depName, diff --git a/test/_fixtures/package.json/inputs/02.json b/test/_fixtures/package.json/inputs/02.json new file mode 100644 index 0000000000000000000000000000000000000000..6c2d055b3b0eafa15cd7cc34612a65ace03c41fa --- /dev/null +++ b/test/_fixtures/package.json/inputs/02.json @@ -0,0 +1,30 @@ +{ + "name": "renovate", + "description": "Client node modules for renovate", + "version": "1.0.0", + "author": "Rhys Arkins <rhys@keylocation.sg>", + "bugs": "https://github.com/singapore/renovate/issues", + "contributors": [ + { + "name": "Rhys Arkins" + } + ], + "dependencies": { + "autoprefixer": "6.5.0", + "bower": "~1.6.0", + "browserify": "13.1.0", + "browserify-css": "0.9.2", + "cheerio": "0.22.0", + "config": "1.21.0" + }, + "homepage": "https://keylocation.sg", + "keywords": [ + "Key Location", + "Singapore" + ], + "license": "MIT", + "repository": { + "type": "git", + "url": "http://github.com/singapore/renovate.git" + } +} diff --git a/test/helpers/npm.js b/test/helpers/npm.js index 7f2f21ff3f1666f4ccaa7b13d074d49483cdfe19..a0bc7e2eca03cc4a70c342905604f9986adda878 100644 --- a/test/helpers/npm.js +++ b/test/helpers/npm.js @@ -7,19 +7,26 @@ chai.should(); npm.setLogger(winston); -const inputContent = fs.readFileSync('./test/_fixtures/package.json/inputs/01.json', 'utf8'); +const input01Content = fs.readFileSync('./test/_fixtures/package.json/inputs/01.json', 'utf8'); +const input02Content = fs.readFileSync('./test/_fixtures/package.json/inputs/02.json', 'utf8'); describe('npm helper', () => { describe('extractDependencies', () => { - const extractedDependencies = npm.extractDependencies(JSON.parse(inputContent)); it('returns an array of correct length', () => { + const extractedDependencies = npm.extractDependencies(JSON.parse(input01Content)); extractedDependencies.should.be.instanceof(Array); extractedDependencies.should.have.length(10); }); it('each element contains non-null depType, depName, currentVersion', () => { + const extractedDependencies = npm.extractDependencies(JSON.parse(input01Content)); extractedDependencies.every(dep => dep.depType && dep.depName && dep.currentVersion) .should.eql(true); }); + it('supports null devDependencies', () => { + const extractedDependencies = npm.extractDependencies(JSON.parse(input02Content)); + extractedDependencies.should.be.instanceof(Array); + extractedDependencies.should.have.length(6); + }); }); describe('getUpgrades', () => { const testVersions = ['0.1.0', '1.0.0', '1.0.1', '1.1.0', '2.0.0-alpha1', '2.0.0', '2.0.1', '3.0.0', '3.1.0'];