2017-12-12 10 views
2

단위 테스트를 위해 Jasmine Jquery를 사용하고 있습니다. 나는 이미 시도단위 테스트에 clipboard.js ('success') 또는 on ('error') 트리거

(function() { 
    $(document).ready(copyToClipboard); 

    function copyToClipboard(){ 
    var clipboard = new Clipboard('#d_clip'); 

    clipboard.on('success', function(e) { 
     $(e.trigger).text("Copied!"); 
     e.clearSelection(); 
     setTimeout(function() { 
     $(e.trigger).text("Copy"); 
     }, 2500); 
    }); 

    clipboard.on('error', function(e) { 
     $(e.trigger).text("Error copying"); 
     setTimeout(function() { 
     $(e.trigger).text("Copy"); 
     }, 2500); 
    }); 
    } 
})(); 

: 나는 다음과 같은 코드가

beforeEach(function() { 
    setFixtures("<button type='button' id='d_clip'>Copy</button>") 
    clipboard = new Clipboard('#d_clip'); 
    }); 

    it('should change text to copied', function() { 
    spyOn(clipboard,'on'); 
    $('#d_clip').trigger('click'); 
    expect($('#d_clip').text()).toEqual('Copied!') 
    }); 

을하지만이 오류가 무엇입니까 : 내가 수동으로 클릭 할 때

Expected 'Copy' to equal 'Copied!'.

의미가 있습니다. 또한 Chrome 개발자 콘솔에서 $('#d_clip').trigger('click');을 수행하면 작동합니다.

클립 보드가 단위 테스트를 위해 아무 것도하지 않는 것 같습니다. 나는 그것을하는 방법을 이해할 수 없다.

테스트하고 싶은 것이 있습니까?

  1. 클릭하고 텍스트가 "복사 됨"인지 확인하고 싶습니다. 성공하면 "Error copying"오류가 발생합니다.

이 레일에 루비에, 그래서으로 JS 단위 테스트를 실행합니다 직접 질문에 대답하기

rake jasmine:ci

+0

테스트없이 클릭하면 작동합니까? 테스트가 어떻게 실행됩니까? – pfg

+0

예, 클릭하면 작동합니다. Chrome 개발자 콘솔에서'$ ('# d_clip'). trigger ('click');을 실행해도 작동합니다. Ruby on Rails에서이 작업을 수행하고 있으므로 'rake jasmine : ci'를 수행합니다. –

답변

1

, 나는 jasmine's done() callback을 시도 할 것입니다. 그것은 사양을 비동기 수 있습니다. 그러나, 스타일의 관점에서

it("should change text to 'copied'", function(done) { 
    $('#d_clip').trigger('click'); 
    clipboard.on('success', function() { 
     expect($('#d_clip').text()).toEqual('Copied!') 
     done(); 
    }); 
}); 

(. 간첩이 불필요한 것을 참고) 나는 당신이 두 개의 작은 사양, 트리거가 copyToClipboard()에서 호출되었는지 여부를 테스트 하나 하나에이 분할 추천하는 콜백을 직접 호출하고 (변수 추출) 값을 업데이트하는지 확인합니다. 두 가지를 통합 테스트와 같이 느낀다.