2014-10-04 11 views
5

Pisałem moduł węzła, który może być używany zarówno backend i klientaKarma: Nie można odnaleźć Zmienna: eksport

(exports || window).Bar= (function() { 
    return function() { .... } 
})(); 

Teraz moje testy karma wykorzystać PhantomJs i narzekają na nie istniejącej zmiennej exports

gulp.task('test', function() { 
    var karma = require('karma').server; 

    karma.start({ 
     autoWatch: false, 
     browsers: [ 
      'PhantomJS' 
     ], 
     coverageReporter: { 
      type: 'lcovonly' 
     }, 
     frameworks: [ 
      'jasmine' 
     ], 
     files: [ 
      'bar.js', 
      'tests/bar.spec.js' 
     ], 
     junitReporter: { 
      outputFile: 'target/junit.xml' 
     }, 
     preprocessors: { 
      'app/js/!(lib)/**/*.js': 'coverage' 
     }, 
     reporters: [ 
      'progress', 
      'junit', 
      'coverage' 
     ], 
     singleRun: true 
    }); 
}); 

błąd pojawia się

PhantomJS 1.9.7 (Mac OS X) ERROR 
    ReferenceError: Can't find variable: exports 

Czy istnieje sposób, aby ignorować eksportu Vari stanie w karam/phantomsJs?

Odpowiedz

6

Wspólny wzór jest zazwyczaj, by sprawdzić, czy zmienna exports jest zdefiniowana:

(function(){ 
    ... 
    var Bar; 
    if (typeof exports !== 'undefined') { 
    Bar = exports; 
    } else { 
    Bar = window.Bar = {}; 
    } 
})(); 

Ten wzór jest stosowany jako przykład - dobrze, to technicznie nieco bardziej skomplikowany w kodzie źródłowym, ponieważ obsługuje również AMD , ale pomysł jest taki.

Można też przesunąć w dół czek przechodzącą go jako pierwszy argument funkcji owijania:

(function(exports){ 

    // your code goes here 

    exports.Bar = function(){ 
     ... 
    }; 

})(typeof exports === 'undefined'? this['mymodule']={}: exports); 

Sprawdźcie at this blog post uzyskać więcej informacji.

+2

Ale jaki jest problem z kodem OP? –

+1

Spójrz na tę odpowiedź: http://stackoverflow.com/questions/4725603/variable-undefined-vs-typeof-variable-undefined – MarcoL

Powiązane problemy