Yönergelerime yönlendirmek için Karma + Jasmine ve ngHtml2JsPreprocessor
eklentisini kullanarak özel bir AngularJS yönergesini test ediyorum, ancak yönergemin neden göründüğünü anlamıyorum şablona erişememek için (derlenmiş öğe boştur).AngularJS test direktifleri Karma, Jasmine ve ngHtml2JsPreprocessor ile: şablon yüklenmedi
basePath: '../../main/webapp/static/',
files: [
{pattern: 'libs/angular/angular.js', watch: false},
{pattern: 'libs/angular-resource/angular-resource.js', watch: false},
{pattern: 'libs/angular-mocks/angular-mocks.js', watch: false},
{pattern: 'libs/angular-ngkit/js/ngkit.js', watch: false},
{pattern: 'libs/jquery/dist/jquery.js', watch: false},
'templates/angular/*.html',
'js/angular/**/*.js',
'../../../test/js/spec/angular/*.js'
],
preprocessors: {
'templates/angular/*.html': ['ng-html2js']
},
ngHtml2JsPreprocessor: {
moduleName: 'templates'
},
browsers: [
'PhantomJS'
],
plugins: [
'karma-phantomjs-launcher',
'karma-jasmine',
'karma-ng-html2js-preprocessor'
],
ve benim testinde:
beforeEach(module('templates'));
beforeEach(module('ngResource'));
beforeEach(module('mywidget'));
templateUrl: 'templates/angular/mywidget.html'
benim Karma yapılandırma aşağıdaki (bunun ilgili kısmı) 'dir: Ben yönergede templateUrl
bu şekilde tanımlanmış
"komik" bölümü, şablon önbelleğini test edersem şablonlar yüklenip derlenir:
beforeEach(inject(function(_$templateCache_) {
var template = _$templateCache_.get('templates/angular/mywidget.html');
}));
template var! Direktifim neden kullanamaz? (tarayıcıda mükemmel çalışır). templateUrl
, yönergemdeki bir template
satır içi ile değiştirirsem, sınamada düzgün bir şekilde işlenir ... ancak harici bir şablon kullanmam gerekiyor, satır içi olarak kabul edilemez ... Takılıyorum !! Akıllı bir fikir mi?
GÜNCELLEME:
hiçbir mantıkla yeni bir yönerge sadece, (sorun uygulamada olduğunu dışlamak için):
angular.module('modulename', []). directive('foo', function() { return { templateUrl: 'path/to/template.html' } });
:
şablon içeriği basitleştirmek
değişiklik şablon yolu
değişim şablonu adı
değişiklik benzer
"ngResource" gibi fazla bağımlılıkları kaldırır karma yapılandırma dosyasının konumu ve
tüm bower bağımlılıklarını yeniden yükleme (ve önbelleği temizleme)
Tüm npm paketleri küfürlere bir Fibonacci dizileri atma sırasında masanın karşı benim yumruklarını Pounding
(Karma'nın eklentisi kullanarak Intellij Idea testi koşuyordu) komut satırından
çalıştırma testleri yeniden
Eğer dinlemiş olsaydı papayı öldürürdü!
(En sonuncusu genellikle beni çözüme götürür ...ama bu sefer)
GÜNCELLEME 2:
ben bu şekilde benim yönergesini tanımlayarak sorunu atlanır:
directive('mywidget', function($templateCache) {
var config = {}; // directive definition (where you define "link", "restrict"...)
var templateUrl = 'templates/angular/mywidget.html';
var cachedTemplate = $templateCache.get(templateUrl);
if (cache) {
config.template = cachedTemplate;
}
else {
config.templateUrl = templateUrl;
}
return config;
});
Bu hileyi kullanarak, benim yönergesi testlerinde düzgün hale olsun. Bu nokta AngularJS'de bir hata gibi görünüyor ... şablonu bir şekilde önbellekten yüklemek başarısız oluyor. Gerçekten
Aynı sorun vardı, ama benim durumumda düzeltme basitti: 'kapsamı '$ call()' $ derleme() 'yi çağırdıktan sonra, aksi takdirde şablonun yüklenme şansı yoktur. –