Comments (9)
I believe this has to do with the type of the request. Jsonp requests are loaded with script injection, right? So I suppose they wouldn't be in need of a fake XHR object.
from sinon.
To fake JSON-P, you have to stub the jQuery function you're calling. In your example, jQuery.get.
from sinon.
Oh I see. So you're saying, rather than using faker servers, do something like:
url = "http://fake.com/foo/bar"
arg = '[{ id: 12, comment: "Hey there" }]'
stub = sinon.stub(jQuery, "ajax").yieldsTo("success",arg)
# spy
callback = sinon.spy()
# remote call
$.ajax(
url: url
success: callback
dataType: "jsonp"
)
# assertions
assert(callback.calledWith(arg)).isTrue("Search run via ajax on a remote resource")
# clean up test stubs
stub.restore()
The part I don't understand is why we need to use yieldsTo()
as opposed to returns()
? What makes yieldsTo
different?
from sinon.
The ajax method doesn't return anything. yieldsTo
causes Sinon to automatically invoke the success
callback, like jQuery would, in the case of a successful request.
from sinon.
Awesome. Thanks!
from sinon.
Just one more curious note. I noticed that even when I run the request with "json," the success callback was still not being run. I could use the data request type "html" to make it work, but now I'm curious why the fake server does not return success state when the expected data type is "json."
server = sinon.fakeServer.create()
url = "/some/article/comments.json"
# set up server
server.respondWith("GET", url, [200, { "Content-Type": "application/json" }, '[{ id: 12, name: "Hey there" }]'])
# spy
callback = sinon.spy()
# remote call
$.get(url, {}, ->
console.log "hi"
callback.call()
, "json")
# respond from fake server
server.respond()
# assertions
assert(callback.called).isTrue("Search run via ajax on fake server")
# clean up
server.restore()
from sinon.
Hook up an error handler with jQuery and you will see why. jQuery tries to parse JSON as, well, JSON, and your response is not valid (need to quote the keys). Better to pass JSON.stringify({ ... })
to respondWith
from sinon.
Aha! I doff my hat to you, sir! :-)
from sinon.
thank you very much for this! wasted a lot of time trying to debug this!
from sinon.
Related Issues (20)
- Improve error message given when a property is only exposed as a getter HOT 3
- Throw meaningful error message when trying to return non-objects from stub used as constructor HOT 1
- Improve error message for immutable descriptors to include link to article HOT 1
- Spies for property accessors are not automatically cleaned up
- Use sinon to mock node-mssql HOT 1
- No useRealTimers() or runAllTimers() ? HOT 1
- I can't find the CHANGELOG HOT 9
- Elaborate on "For the stubbing to work, the stubbed method cannot be destructured, neither in the module under test nor in the test." HOT 5
- Unable to install [email protected] HOT 6
- Remove unused/meaningless exports and modules from the codebase HOT 1
- Limit assertion log to a reasonable default HOT 1
- `returns` not override `callThrough` HOT 4
- `returns` clears fake's `callArgAt` HOT 5
- Discrepancy in stub construction methods HOT 4
- Feature Request: Add API support to stub a parent class constructor. HOT 4
- .rejects doesn't match documentation HOT 2
- SyntaxError: Unexpected token . -> assert(opts?.sinonXhrLib, "No XHR lib passed in"); HOT 1
- Documentation of callIds
- Cannot stub private methods in native JavaScript classes HOT 1
- Calling replaceGetter invokes the original function HOT 4
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from sinon.