如何模拟 coldbox.system.web.context.RequestContext 并初始化它?

How to mock a coldbox.system.web.context.RequestContext and initialize it?

我在工作中继承了一些代码。以前的人写了一些 ColdFusion 代码,如下所示:

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

我正在尝试为此函数编写单元测试,但我不知道如何模拟此 "Event"。 这是我的代码:

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

ColdBox 抛出一个异常,当我 运行 该代码时,我必须初始化 mockEvent。有人看到我做错了什么吗?

在扩展 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." );

});