2014-12-18 15 views
10

Mam następujący kod:test imagesLoaded() postęp oddzwaniania przy użyciu jaśmin

$.ajax({ 
     url: API + "item/" + item_id.replace('-',':'), 
     beforeSend: function(xhr){xhr.setRequestHeader('x-customer', customer);}, 
     format: "json", 
     success: function(data){ 
      var template_name = data.source + settings.overlay_style; 
      $('#modal .modal-content').html(Handlebars.templates[template_name](data)); 

     /* Handle missing avatars */ 
     $('#modal-avatar-image').imagesLoaded() 
      .progress(function(instance, image) { 
       if (!image.isLoaded) { 
        image.img.src = "/images/404_avatar.svg"; 
        image.img.alt = "The avatar for this user could not be found. Showing placeholder"; 
        image.img.title = "The avatar for this user could not be found. Showing plac eholder"; 
       } 
      }); 

     /* Handle missing main content */ 
     $('.modal-img').imagesLoaded() 
      .progress(function(instance, image) { 
       if (!image.isLoaded) { 
        image.img.src = "/images/404_image.svg"; 
        image.img.alt = "This image is lost in space. Could be removed by user or could be lost in a remote tube"; 
        image.img.title = "This image is lost in space. Could be removed by user or could be lost in a remote tube"; 
       } 
       $('.modal-img').removeClass('loading'); 
      }); 
}); 

ja napisałem kilka testów dla tego bloku kodu, ale nie wydaje się uzyskać to wykonać:

var attrs = ['src', 'alt', 'title']; 

      attrs.forEach(function(attr, idx, arr) { 
       it('should set default ' + attr + ' for img#modal-avatar-image', function() { 
        spyOn($, 'ajax').and.callFake(function(e){ 
         e.success({'source': 'twitter'}); 
        }); 
        openModal('test'); 
        expect(val).toBeDefined(); 
        val = $($("#modal-avatar-image")[0]).attr(attr); 
        if(attr === 'src'){ 
         //expect the src to chnage from the old value 
         expect(val !== src).toBeTruthy(); 
        } 
       }); 
      }); 

      attrs.forEach(function(attr, idx, arr) { 
       it('should set default ' + attr + ' for img.modal-img', function() { 
        spyOn($, 'ajax').and.callFake(function(e){ 
         e.success({'source': 'twitter'}); 
        }); 
        openModal('test'); 
        val = $($(".modal-img")[0]).attr(attr); 
        expect(val).toBeDefined(); 
        if(attr === 'src'){ 
         //expect the src to chnage from the old value 
         expect(val !== src).toBeTruthy(); 
        } 
       }); 
      }); 

wyjściowa:

Expected undefined to be defined. 
    Error: Expected undefined to be defined. 
     at Object.<anonymous> (/home/oleg/dev/hub/test/fed/api.scenerio.js:346:41) 
    Expected false to be truthy. 
    Error: Expected false to be truthy. 
     at Object.<anonymous> (/home/oleg/dev/hub/test/fed/api.scenerio.js:350:53) 


    Expected undefined to be defined. 
    Error: Expected undefined to be defined. 
     at Object.<anonymous> (/home/oleg/dev/hub/test/fed/api.scenerio.js:346:41) 


    Expected false to be truthy. 
    Error: Expected false to be truthy. 
     at Object.<anonymous> (/home/oleg/dev/hub/test/fed/api.scenerio.js:365:53) 


    Expected undefined to be defined. 
    Error: Expected undefined to be defined. 
     at Object.<anonymous> (/home/oleg/dev/hub/test/fed/api.scenerio.js:362:41) 


    Expected undefined to be defined. 
    Error: Expected undefined to be defined. 
     at Object.<anonymous> (/home/oleg/dev/hub/test/fed/api.scenerio.js:362:41) 
+0

W swojej pierwszej pętli forEach uruchamiasz swoje twierdzenie na val, zanim je zdefiniujesz. – Jeff

+0

Czy możesz przedłużyć swój kod, aby pokazać, gdzie deklarujesz 'var val;'? Dodaj także numer początkowy swojej specyfikacji. Czy możesz wyjaśnić, dlaczego 'spodziewasz się()' 'val'' toBeDefined() '** przed ** otrzymanie wartości do niego w pierwszym' ìt() '? Może być celowo lub jednym z twoich błędów. Last but not least: w drugim 'it()' przechowujesz wartość atrybutu na 'val'; jeśli jest nieokreślone, może to być spowodowane tym, że element '# modal-avatar-image' nie został wstawiony do dokumentu (mógł on zostać utworzony, ale nie został wstawiony,' $ ("# modal-avatar-image") 'nie znajdzie to wtedy). –

Odpowiedz

3

W pierwszej pętli foreach, to:

expect(val).toBeDefined(); 
val = $($("#modal-avatar-image")[0]).attr(attr); 

powinno być:

val = $($("#modal-avatar-image")[0]).attr(attr); 
expect(val).toBeDefined(); 

Wygląda używasz swoje twierdzenia na temat Val zanim zostanie zdefiniowany.

Powiązane problemy