javascript - How to use Jasmine spies on an object created inside another method? -
given following code snippet, how create jasmine spyon
test confirm dosomething
gets called when run myfunction
?
function myfunction() { var foo = new mycoolobject(); foo.dosomething(); };
here's test looks like. unfortunately, error when spyon
call evaluated:
describe("myfunction", function () { it("calls dosomething", function () { spyon(mycoolobject, "dosomething"); myfunction(); expect(mycoolobject.dosomething).tohavebeencalled(); }); });
jasmine doesn't appear recognize dosomething
method @ point. suggestions?
when call new mycoolobject()
invoke mycoolobject
function , new object related prototype. means when spyon(mycoolobject, "dosomething")
you're not setting spy on object returned new
call, on possible dosomething
function on mycoolobject
function itself.
you should able like:
it("calls dosomething", function() { var originalconstructor = mycoolobject, spiedobj; spyon(window, 'mycoolobject').and.callfake(function() { spiedobj = new originalconstructor(); spyon(spiedobj, 'dosomething'); return spiedobj; }); myfunction(); expect(spiedobj.dosomething).tohavebeencalled(); });
Comments
Post a Comment