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

  • Dave Wallace

    Dave Wallace

    27 Kasım 2007
  • Music EuroDance 2

    Music EuroDa

    12 Mayıs 2011
  • Sorikan

    Sorikan

    3 ŞUBAT 2008