SORU
9 Mart 2013, CUMARTESİ


Ünite-test yönergesi denetleyicileri Açısal denetleyici küresel yapmadan

Yönerge denediğini gösterir nerede Vojta iğrenç. jina mükemmel depo, modül sarıcı dışında Direktifi denetleyicisi tanımlar. Buraya bakın: https://github.com/vojtajina/ng-directive-testing/blob/master/js/tabs.js

Bu kötü uygulama ve genel ad kirleten değil mi?

Eğer bir şey TabsController aramak mantıklı olabilir başka bir yer var olsaydı, bir şeyler kırmak değil mi?

Burada bulunan olmaktır söz konusu Direktif testleri: https://github.com/vojtajina/ng-directive-testing/commit/test-controller

Kontrolörler Direktifi direktifin geri kalanından ayrı, genel bir ad denetleyicisi yerleştirmeden test etmek mümkün mü?

Uygulaması içinde tüm Direktifi saklanması için iyi olurdu.(...) yönergesi tanım.

CEVAP
9 Mart 2013, CUMARTESİ


Mükemmel bir soru!

Yani, bu ortak bir endişe ile denetleyicileri, ama aynı zamanda potansiyel olan hizmetleri bir Direktif olabilir yapmak için işini ama yok, ille de maruz istediğiniz bu kumanda / hizmet için "dış dünya".

Buna yürekten inanıyorumküresel veri kötü ve Kaçınılması gereken ve bu yönergede kontrolörleri için de geçerlidir. Eğer birkaç farklı yaklaşımlar bu denetleyicileri tanımlamak için alabiliriz bu varsayımı kabul edersek "". yerel Yaparken çok aklımızda tutmamız gerekiyordenetleyicisi "kolayca" erişilebilir birim testleri . hala olmalıdır sadece Direktif kapatılmasını içine saklanamayız. IMO olasılık vardır:

1) Öncelikle, biz olabilir sadecebir modül düzeyi hakkında Yönerge denetleyici tanımlayıneski::

angular.module('ui.bootstrap.tabs', [])
  .controller('TabsController', ['$scope', '$element', function($scope, $element) {
    ...
  }])
 .directive('tabs', function() {
  return {
    restrict: 'EA',
    transclude: true,
    scope: {},
    controller: 'TabsController',
    templateUrl: 'template/tabs/tabs.html',
    replace: true
  };
})

Bu Vojta işi dayanan https://github.com/angular-ui/bootstrap/blob/master/src/tabs/tabs.js kullandığımız basit bir tekniktir.

Bu çok basit bir teknik olmasına rağmen hala başka bir kumanda modülü iptal olabilecek demek ki bütün uygulamasına maruz unutulmamalıdır. Bu anlamda bir denetleyici AngularJS uygulama (yani küresel pencere bir kapsam kirletici) yerel yapar ama aynı zamanda tüm AngularJS küresel modülleri.

2)Test için kapatma kapsam ve özel dosyaları bir kurulum kullanın.

Eğer tamamen denetleyici bir işlevi gizlemek istiyorsak bir kapatma kodu şal yapabiliriz. Bu AngularJS kullandığı bir tekniktir. Örneğin, bakıyor NgModelController görebiliriz bu tanımlanan bir "küresel" işlevi kendi dosyaları (ve böylece kolayca erişilebilir test) ama bütün dosya sarılı kapatılması sırasında inşa süresi:

"Güvenli" ama inşa etmek için ön kurulum biraz gerektirir, özetle:

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Andrey Menshikov

    Andrey Mensh

    28 Ocak 2012
  • David MeShow

    David MeShow

    10 EKİM 2006
  • The CGBros

    The CGBros

    20 AĞUSTOS 2011