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

  • BigDawsVlogs

    BigDawsVlogs

    17 HAZİRAN 2013
  • jocc talking shit

    jocc talking

    6 NİSAN 2007
  • midomansour

    midomansour

    19 EYLÜL 2009