diff --git a/app/assets/javascripts/blob/pdf/index.js b/app/assets/javascripts/blob/pdf/index.js
index 5b79717d1e151686936487ed09123606a83be1c1..a74c2db9a61f181ee97afb4f54de7fb2b6433079 100644
--- a/app/assets/javascripts/blob/pdf/index.js
+++ b/app/assets/javascripts/blob/pdf/index.js
@@ -10,7 +10,7 @@ Vue.use(PDFLab, {
 export default () => {
   const el = document.getElementById('js-pdf-viewer');
 
-  new Vue({
+  return new Vue({
     el,
     data() {
       return {
diff --git a/spec/javascripts/blob/pdf/index_spec.js b/spec/javascripts/blob/pdf/index_spec.js
index 19a4e55a9db9ae6d6061bb080da3be3eaa2f30fe..d3a4d04345bcd2b6aa43b07ccbe0b0ebe656ade8 100644
--- a/spec/javascripts/blob/pdf/index_spec.js
+++ b/spec/javascripts/blob/pdf/index_spec.js
@@ -3,6 +3,18 @@ import testPDF from './test.pdf';
 
 describe('PDF renderer', () => {
   let viewer;
+  let app;
+
+  const checkLoaded = (done) => {
+    if (app.loading) {
+      setTimeout(() => {
+        checkLoaded(done);
+      }, 100);
+    } else {
+      done();
+    }
+  };
+
   preloadFixtures('static/pdf_viewer.html.raw');
 
   beforeEach(() => {
@@ -21,11 +33,9 @@ describe('PDF renderer', () => {
 
   describe('successful response', () => {
     beforeEach((done) => {
-      renderPDF();
+      app = renderPDF();
 
-      setTimeout(() => {
-        done();
-      }, 500);
+      checkLoaded(done);
     });
 
     it('does not show loading icon', () => {
@@ -50,11 +60,9 @@ describe('PDF renderer', () => {
   describe('error getting file', () => {
     beforeEach((done) => {
       viewer.dataset.endpoint = 'invalid/endpoint';
-      renderPDF();
+      app = renderPDF();
 
-      setTimeout(() => {
-        done();
-      }, 500);
+      checkLoaded(done);
     });
 
     it('does not show loading icon', () => {