これはかなり奇妙です。testem
ランナーを使用するjasmine2
と、次の仕様が実行されます (ただし、期待値がないことを正しく示しています)。
describe('Spying on array.prototype methods', function(){
it('should work this way', function(){
spyOn( Array.prototype, 'push' ).and.callThrough();
// expect(1).toBe(1);
});
});
ただし、expect
(any !) を追加すると、コンソールexpect
に次のメッセージが表示されてスタックがオーバーフローします。testem
RangeError: Maximum call stack size exceeded. at http://localhost:7357/testem/jasmine2.js, line 980
最終的には、次のようなことをしたいと思います。
describe('Some structure.method', function(){
it('does not use native push', function(){
spyOn( Array.prototype, 'push' ).and.callThrough();
[].push(1); // actually more like `myStructure.myMethod('test')`
expect( Array.prototype.push ).not.toHaveBeenCalled();
});
});
この奇妙なことに光を当てることができる人に前もって感謝します. ネイティブのプロトタイプ メソッドをスパイできませんか?