2017-08-23 6 views
1

DOMに特定の要素が存在することを必要とするjavascript関数をテストしようとしています。以下は、私がテストしようとしている機能である:私はテストを実行し、デバッガに任意の型$('#all-items').lengthを取得するとjqueryセレクタを擬似してhtml要素を返す

auction.save_scroll_state = function() { 
    var user_agent = $window.navigator.userAgent.toLowerCase(); 
    var is_android = user_agent.indexOf("android") > -1; 

    if (is_android) { 
     var restore_pos = null; 
     debugger 
     if ($location.search().section == "items") { 
     restore_pos = $('#all-items').scrollTop(); 
     $('#all-items').one('scroll', function(){$('#all-items').scrollTo(restore_pos)}); 
     } 
     else if ($location.search().section == "user_items"){ 
     restore_pos = $('#your-items').scrollTop(); 
     $('#your-items').one('scroll', function(){$('#your-items').scrollTo(restore_pos)}); 
     } 
    } 
    }; 

その要素が見つからないことを示す0を返します。 私はjqueryセレクターをモックするJasimeスパイのようなものを形成しようとしています。私のテストは以下の通りです:

it ('save_scroll_state android user_agent all-items', inject(function($bwAppState, $location, $window) { 
    $window.navigator = {userAgent: "Mozilla/5.0 (Linux; Android 7.0; SM-G950F Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.83 Mobile Safari/537.36"}; 
    var items_div = $("<div id='all-items'></div>"); 
    var jq_div_spy = spyOn($.fn, 'html').and.returnValue(items_div); 
    var items_div_spy = spyOn(items_div, 'scrollTop'); 
    spyOn($location, "search").and.returnValue({section: 'items'}); 
    $bwAppState.auction.save_scroll_state(); 
    expect(items_div_spy).toHaveBeenCalled(); 
    delete $window.nagivator; 
})); 

主な目的はscrollTop()はいくつか持っているHTML要素とid="all-items"のIDタグに呼び出されることを確認することです。

すべてのヘルプは非常に理想的

答えて

0

ないと理解されるだろうが、と行うことができます:.testscrollTopの唯一のコールが行われたこと、テストはの本当の.test要素の存在の無知ではありませんしてください

describe('ScrollTop on .test', function(){ 

    var scrollTopSpy; 

    beforeEach(function(){ 
     scrollTopSpy = jasmine.createSpyObj('$-spy', ['scrollTop']); 
     spyOn(window, '$').and.callFake(function(selector){ 
      if(selector == '.test') { 
       return scrollTopSpy; 
      } 
      else { 
       return $(selector); 
      } 
     }); 
    }); 

    it('is called', function(){ 
     $('.test').scrollTop(); 
     expect($('.test').scrollTop).toHaveBeenCalled(); 
    }); 

    it('is not called', function(){ 
     expect($('.test').scrollTop).not.toHaveBeenCalled(); 
    }) 
}) 

DOM。