2014-12-18 18 views
10

Tôi có đoạn mã sau:thử nghiệm imagesLoaded() tiến callback sử dụng hoa nhài

$.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'); 
      }); 
}); 

Tôi đã viết nhiều bài kiểm tra cho khối mã này, nhưng tôi dường như không thể có được nó để thực thi:

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(); 
        } 
       }); 
      }); 

Output:

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

Trong vòng lặp forEach đầu tiên của bạn, bạn đang chạy xác nhận của bạn trên val trước khi bạn đã xác định nó. – Jeff

+0

Bạn có thể mở rộng mã của mình để hiển thị nơi bạn khai báo 'var val;'? Vui lòng thêm số dòng bắt đầu của thông số kỹ thuật của bạn. Bạn có thể vui lòng giải thích về lý do tại sao bạn 'mong đợi()' 'val'' toBeDefined() '** trước khi ** nhận được một giá trị vào nó trong' ìt() 'đầu tiên? Có thể là cố ý hoặc một trong những sai lầm của bạn. Cuối cùng nhưng không kém phần quan trọng: trong 'it()' thứ hai, bạn lưu một giá trị thuộc tính vào 'val'; nếu nó không xác định, điều này có thể là do phần tử '# modal-avatar-image' không được chèn vào tài liệu (nó có thể đã được tạo nhưng không được chèn vào,' $ ("# modal-avatar-image") 'sẽ không tìm thấy sau đó nó). –

Trả lời

3

Trong vòng lặp foreach đầu tiên của bạn, điều này:

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

nên là:

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

Dường như bạn đang chạy khẳng định của bạn trên val trước khi nó được định nghĩa.

Các vấn đề liên quan