I am pulling my hair out trying to figure out how to mock a constructor using sinon. I have a function that will create multiple widgets by calling a constructor that accepts a few arguments. I want to verify that the constructor is called the correct number of times with the correct parameters, but I don't want to actually construct the widgets. The following links seemingly explain a straightforward way of mocking the constructor, however it does not work for me:
Spying on a constructor using Jasmine
http://tinnedfruit.com/2011/03/25/testing-backbone-apps-with-jasmine-sinon-2.html
When I make the following call to stub the constructor:
sinon.stub(window, "MyWidget");
I get the following error:
Uncaught TypeError: Attempted to wrap undefined property MyWidget as function
When debugging in Chrome I see MyWidget shows up in the Local section of the Scope Variables, however there is not MyWidget property off of window.
Any help would be greatly appreciated.
I ran into this error by mistakenly typing
sinon.stub.throws(expectedErr)
rather thansinon.stub().throws(expectedErr)
. I've made similar mistakes before and not encountered this particular message before, so it threw me.Use
sinon.createStubInstance(MyES6ClassName)
, then when MyES6ClassName is called with anew
keyword, a stub of MyES6ClassName instance will returned.I was able to get StubModule to work after a few tweaks, most notably passing in async:false as part of the config when requiring in the stubbed module.
Kudos to Mr. Davis for putting that together
Using Sinon 4.4.2, I was able to mock an instance method like this:
A similar solution provided here: Stubbing a class method with Sinon.js
I used Mockery to Mock a Constructor/Function without any problems.
You should be able to apply a Sinon Spy just as the example above does.
Make sure to disable or reset Mockery after the test(s)!
Just found this in the documentation.