SORU
11 Temmuz 2012, ÇARŞAMBA


Nasıl RequireJS birim test için sahte bağımlılıkları olabilir miyim?

Test etmek istiyorum AMD bir modül var, ama gerçek bağımlılıkları yüklemek yerine, bağımlılıklarından alay etmek istiyorum. Requirejs kullanıyorum, ve benim modül için kod şöyle görünür:

define(['hurp', 'durp'], function(Hurp, Durp) {
  return {
    foo: function () {
      console.log(Hurp.beans)
    },
    bar: function () {
      console.log(Durp.beans)
    }
  }
}

Nasıl hurp durp Bu kadar alay etkin birim ben test edebilirim?

CEVAP
27 Temmuz 2012, Cuma


Yani this post okuduktan sonra sadece bağımlılıkları alay nereye kadar requirejs config işlevini kullanan bir çözüm ile test için yeni bir içerik oluşturmak için geldim:

var cnt = 0;
function createContext(stubs) {
  cnt  ;
  var map = {};

  var i18n = stubs.i18n;
  stubs.i18n = {
    load: sinon.spy(function(name, req, onLoad) {
      onLoad(i18n);
    })
  };

  _.each(stubs, function(value, key) {
    var stubName = 'stub'   key   cnt;

    map[key] = stubName;

    define(stubName, function() {
      return value;
    });
  });

  return require.config({
    context: "context_"   cnt,
    map: {
      "*": map
    },
    baseUrl: 'js/cfe/app/'
  });
}

Hurp Durp tanımlar nesneler tarafından kurulacak yeni bir bağlam oluşturur fonksiyonun içine geçti. Matematik.adı rastgele çalışıyor ama belki de biraz kirli. Eğer önlemek için her suite için yeni içerik oluşturmak için gereken test bir sürü alay yeniden kabul ederseniz, ya da gerçek requirejs modülü istediğiniz zaman alay yüklenmesine sebep.

Senin durumunda bu gibi görünecektir:

(function () {

  var stubs =  {
    hurp: 'hurp',
    durp: 'durp'
  };
  var context = createContext(stubs);

  context(['yourModuleName'], function (yourModule) {

    //your normal jasmine test starts here

    describe("yourModuleName", function () {
      it('should log', function(){
         spyOn(console, 'log');
         yourModule.foo();

         expect(console.log).toHasBeenCalledWith('hurp');
      })
    });
  });
})();

Bir süre için Üretim ve gerçekten sağlam bu yaklaşımı kullanıyorum.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • FND Films

    FND Films

    2 Mayıs 2006
  • HowcastSportsFitness

    HowcastSport

    11 Mayıs 2011
  • LaKe Lightroom Tutorials

    LaKe Lightro

    22 Temmuz 2014