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

  • Khan Academy

    Khan Academy

    17 Kasım 2006
  • TrenchTech Computer Repair Tutorials

    TrenchTech C

    19 EYLÜL 2014
  • Tylerron

    Tylerron

    6 AĞUSTOS 2006