2017-11-14 2 views
1

나는 내 저작물을 일부 상속 받았다. 나는이 기능을위한 단위 테스트를 작성하려고하지만이 "이벤트"를 조롱하는 방법을 모른다coldbox.system.web.context.RequestContext를 조롱하고 초기화하는 방법?

public struct function GetData(Event,RC,PRC){}; 

: 이전의 사람은 다음과 같습니다 일부 ColdFusion에서 코드를 썼다.

mockEvent=createMock(className='coldbox.system.web.context.RequestContext'); 

냉각 박스는 내가 그 코드를 실행하면 내가 mockEvent를 초기화해야합니다 예외를 던지고있다 : 이 내 코드입니다. 누구든지 내가 뭘 잘못하고 있는지 알아?

+0

불행히도 귀하의 질문에 답변을 드릴 수 없지만 설명서를 보시면 도움이 될 것입니다 - [모의 객체 만들기] (https://testbox.ortusbooks.com/content/mockbox/creating_a_mock_object.html) –

답변

2

Coldbox.system.testing.BaseTestCase을 확장하는 테스트 내에서 Coldbox RequestContext 객체를 쉽게 조롱 할 수 있습니다.

테스트에서 다음 변수를 설정해야합니다. this.loadColdbox=true 다음에 setup()을 호출 할 때마다 super.beforeAll() 메서드를 호출 한 후 컨텍스트가 다시 작성됩니다.

그런 다음 RequestContext는 getRequestContext() 메서드와 함께 사용할 수 있습니다. 여기에 요청 getHTTPMethod() 기능을 조롱의 예이다 (I는 일반적으로 서로 다른 HTTP 동사에 응답하도록 구성되어 API 방법을 조롱하기 위해이 방법을 사용) :

:

function newEventArgs(method = "GET") { 
     //rebuild the context 
     setup(); 
     //mock the context 
     var event = getRequestContext(); 
     prepareMock(event).$("getHTTPMethod", arguments.method); 
     var rc = event.getCollection(); 
     var prc = event.getCollection(private=true); 
     prc.response = getWirebox().getInstance("APIResponse"); 

     return { 
      "event":event, 
      "rc":rc, 
      "prc":prc 
     }; 
} 

그럼 당신이 만드는 방법과 같이 테스트 할 수

it("Tests Widgets.create", function(){ 

     var testWidget = { 
      "name" : "Test Widget" 
     }; 

     var eventArgs = newEventArgs("POST"); 

     structAppend(eventArgs.rc, testWidget, true); 

     var event = execute( 
      route="/api/v1/widgets" 
      eventArgs=eventArgs 
     ); 

     expect(event.getPrivateValue("response").getStatusCode()).toBe(201, "Event response did not return the proper status code."); 

}); 
+0

감사합니다. JClausen, 문제가 해결되었습니다. –

관련 문제