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'];