2017-01-16 6 views
0

Я пытаюсь написать единичный тест для моего электронного приложения js, и я застрял в одном месте.Как насмехаться в electronicJS

Например

Позволяет сказать, что мое приложение код, как показано ниже

var app= (function() { 
    function app() { 
     var _this = this; 
     this.open = function (data) { 
      var deferred = Q.defer(); 
      try { 
       // some code 
      } 
      catch (ex) { 
       deferred.reject(ex); 
      } 
      return deferred.promise; 
     }; 

    } 
}()); 
exports.app = app 

Теперь, если я хочу, чтобы запустить его на клиенте электронной он будет работать прекрасно, как модуль установлен электронный на компьютере клиента

Проблема заключается в том, что я пытаюсь написать единичные тестовые примеры для вышеуказанного, поскольку электрон не установлен здесь на dev-машине, как показано ниже

import { app} from '../../app' 
    import { Rights } from '../../Rights' 
    describe('app',() => { 
     let app: app; 
     beforeEach(() => { 
      app= new app(); 
     }) 

     it('should call open() and return error for null content', function (done) { 
      let output = app.open(null); 
      output 
      .then((res) => { 
       //expectation 
       done(); 
      }) 
      .catch((err)=>{ 
       //expectation 
       done(); 
      }) 
     }) 
    }) 

Получение следующей ошибки

Error: Cannot find module 'electron'                                      
    at Function.Module._resolveFilename (module.js:469:15)                                 
    at Function.Module._load (module.js:417:25)                                   
    at Module.require (module.js:497:17)                                     
    at require (internal/module.js:20:19)                                     
    at Object.<anonymous> (<project pat>/app.js:2:16)                  
    at Module._compile (module.js:570:32)                                     
    at Object.Module._extensions..js (module.js:579:10)                                 
    at Module.load (module.js:487:32)                                      
    at tryModuleLoad (module.js:446:12)                                     
    at Function.Module._load (module.js:438:3)                                    
npm ERR! Test failed. See above for more details. 

Вопрос

  • Как издеваются требуется для любого модуля, который не установлен на Dev ПК , но необходимого для фактического исполнения (устанавливается на ПК клиента) ,

ответ

0

Вы можете перехватить require вызовы, перекрывая module._load:

const m = require('module'); 
const originalLoader = m._load; 
const stubs = { electron : {} }; 

m._load = function hookedLoader(request, parent, isMain) { 
    const stub = stubs[request]; 
    return stub || originalLoader(request, parent, isMain); 
}; 
+0

Использовал ваше решение с некоторыми незначительными изменениями .. :) –

0

Я имел аналогичные проблемы с мокко. Мой основной подход был: * требуют электрон пред крюком, * переопределить его с местным умолчанию * требуется приложение * очистить после крюка

Вот пример:

var el = require('../../modules/electron'); 
 

 
describe('app', function() { 
 
    'use strict'; 
 

 
    var el_override = { 
 
     post: function() { 
 
     }, 
 
     get: function() { 
 
     } 
 
    }, app; 
 

 
    before(function() { 
 
    /* Since we already have electron required, we override it 
 
     from node cache by: 
 
     require.cache['/path/to/file/name'].exports = el_override 
 
    */ 
 

 
    // Require app 
 
    // This will import overridden electron 
 
    App = require('app-location'); 
 
    }); 
 

 
    beforeEach(function() { 
 
    // init app 
 
    app = new App(); 
 
    }); 
 

 
    after(function() { 
 
    // Clean Up both electron override and app by 
 
    // delete requre.cache['/path/to/file/names'] 
 
    }); 
 

 
    it('should test for batch', function() { 
 
    // Call you functions 
 
    }); 
 
});

+0

Но тогда вам нужно установить электрон на dev-машину, а также .. правильно ..? –

+0

Да на машине dev вы устанавливаете нормальную зависимость, а также dev. При производстве установите нормальную зависимость. –

+0

Это то, чего я пытаюсь избежать ... –

 Смежные вопросы

  • Нет связанных вопросов^_^