小编h2s*_*ein的帖子

如何在Jasmine.js中使用带有toHaveBeenCalledWith的间谍和一个可变数组?

我有一些代码调用一个回调函数与一个数组作为单个参数.调用回调后,代码会更改数组内容.它与此代码类似:

function myCode( callback ) {
    var someArray = [ 1, 2, 3, 4 ];
    callback( someArray );

    // change someArray in arbitrary ways
    someArray.splice( 2 );
    ...
}
Run Code Online (Sandbox Code Playgroud)

现在,我想验证是否使用正确的数组内容调用回调.使用Jasmine.js我会像这样编写我的规范:

describe( "My code", function() {
    var callback;

    beforeEach( function() {
        callback = jasmine.createSpy( "My callback" );
        myCode( callback );
    });

    it( "calls the callback and passes the correct array", function() {
        expect( callback ).toHaveBeenCalledWith( [ 1, 2, 3, 4 ] );
    });
});
Run Code Online (Sandbox Code Playgroud)

这失败了.问题是,Jasmine.js记录了数组,但没有复制它.由于在调用之后更改了数组,所以即使实际调用满足了期望,expect() - Line也会失败.可变对象也会出现同样的问题.

我该如何测试这样的代码?

javascript unit-testing jasmine

7
推荐指数
1
解决办法
3083
查看次数

如何在异步servlet中实现AsyncListener/ReadListener/WriteListener.onError?

所述的Servlet 3.1 API定义了一个异步的servlet API,它下降到执行接口AsyncListener,WriteListener和ReadListener.所有这些都有一个onError回调,但我找不到有关此回调的错误条件和预期行为的任何有用信息.

在一个示例中,作者在onError回调中完成了AsyncContext:

public void onError(final Throwable t) {
    ac.complete();
    t.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

有什么异常servlet在发生错误时应该做的最佳实践吗?

有趣的是,如果HTTP请求被客户端中止(使用Jetty 9.1.3测试),则不会调用onError处理程序.但是,在这种情况下,这里似乎存在内存泄漏,因为WriteListener似乎没有被清除.只有ReadListener和AsyncListener实例在调用System.gc()时才会看到finalize()调用(用于测试).

java asynchronous servlets

5
推荐指数
0
解决办法
704
查看次数