我在我的工作中继承了一些代码。之前的人写了一些看起来像这样的ColdFusion代码:
public struct function GetData(Event,RC,PRC){};
我正在尝试为此功能编写单元测试,但我不知道如何模拟这个“事件”。 这是我的代码:
mockEvent=createMock(className='coldbox.system.web.context.RequestContext');
ColdBox抛出一个异常,我必须在运行该代码时初始化mockEvent
。有谁看到我做错了什么?
答案 0 :(得分:2)
在扩展Coldbox.system.testing.BaseTestCase
的测试中,您可以轻松模拟Coldbox RequestContext对象。
您需要在测试中设置以下变量:this.loadColdbox=true
然后,在您测试中调用super.beforeAll()
方法后,每次调用setup()
时,上下文都是重建。
之后,RequestContext可用方法getRequestContext()
。这是一个模拟请求getHTTPMethod()
函数的示例(我通常使用此方法来模拟配置为响应不同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." );
});