diff --git a/lib/src/impl.dart b/lib/src/impl.dart
index 9a8c2a0..3a23de1 100644
--- a/lib/src/impl.dart
+++ b/lib/src/impl.dart
@@ -44,11 +44,13 @@
     _resolver = resolver;
   }
 
+  /// The git url.
+  String get url => _description['url'];
+
   /// The git commit.
   String get resolvedRef => _description['resolved-ref'];
 
-  /// The git url.
-  String get url => _description['url'];
+  String toString() => '${name} ${version} (${url}, ${resolvedRef})';
 }
 
 class PathPackageRefImpl extends PackageRefImpl {
@@ -66,6 +68,8 @@
     Directory dir = new Directory(path);
     return dir.existsSync() ? new Package(dir, name, version) : null;
   }
+
+  String toString() => '${name} ${version} (${path}, relative=${relative})';
 }
 
 /// A reference to a package in the pub cache (for instance, something in
@@ -84,6 +88,8 @@
     if (index != -1) {
       _version = new Version.parse(_name.substring(index + 1));
       _name = _name.substring(0, index);
+    } else {
+      _version = Version.none;
     }
   }
 
@@ -115,11 +121,8 @@
     File f = new File(path.join(directory.path, 'pubspec.yaml'));
     if (f.existsSync()) {
       Map pubspec = yaml.loadYaml(f.readAsStringSync());
-      if (pubspec['version'] == null) {
-        _version = Version.none;
-      } else {
-        _version = new Version.parse(pubspec['version']);
-      }
+      _version = pubspec.containsKey('version')
+          ? new Version.parse(pubspec['version']) : Version.none;
     }
   }
 
@@ -130,4 +133,6 @@
   String get resolvedRef => _resolvedRef;
 
   Package resolve() => new Package(directory, name, version);
+
+  String toString() => '${name} ${version} (${resolvedRef})';
 }
diff --git a/test/pub_cache_test.dart b/test/pub_cache_test.dart
index 4301d6f..aa6951b 100644
--- a/test/pub_cache_test.dart
+++ b/test/pub_cache_test.dart
@@ -143,14 +143,25 @@
       expect(buf.toString(), isNotEmpty);
     });
 
+    test('everything parses', () {
+      StringBuffer buf = new StringBuffer();
+      PubCache cache = new PubCache();
+      var packageRefs = cache.getPackageRefs();
+      packageRefs.forEach((ref) {
+        expect(ref.version, isNotNull);
+        buf.writeln('${ref}');
+      });
+      expect(buf.toString(), isNotEmpty);
+    });
+
     test('list packages', () {
       StringBuffer buf = new StringBuffer();
       PubCache cache = new PubCache();
       var packages = cache.getCachedPackages();
       packages.forEach((pkg) {
-        List versions = cache.getAllPackageVersions(pkg);
+        List<PackageRef> versions = cache.getAllPackageVersions(pkg);
         buf.writeln(
-            '  ${pkg} [${versions.map((p) => p.version.toString()).join(', ')}]');
+            '${pkg} [${versions.map((p) => p.version.toString()).join(', ')}]');
       });
       expect(buf.toString(), isNotEmpty);
     });
diff --git a/tool/travis.sh b/tool/travis.sh
index dc1d87b..9c9c989 100755
--- a/tool/travis.sh
+++ b/tool/travis.sh
@@ -9,6 +9,8 @@
 
 # Activate some packages for use while running tests.
 pub global activate dart_coveralls
+pub global activate path 1.3.0
+pub global activate path
 pub global activate --source git https://github.com/dart-lang/test.git
 pub global activate --source path .
 
