我有一些代码以数组作为单个参数调用回调函数。调用回调后,代码更改数组内容。它类似于此代码:
function myCode( callback ) {
var someArray = [ 1, 2, 3, 4 ];
callback( someArray );
// change someArray in arbitrary ways
someArray.splice( 2 );
...
}
现在,我想验证是否使用正确的数组内容调用了回调。使用 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 ] );
});
});
这失败了。问题是,Jasmine.js 记录了数组但没有复制它。由于调用后数组发生了变化,因此 expect()-Line 失败,即使实际调用满足了期望。可变对象也会出现同样的问题。
我怎样才能测试这样的代码?