sinon.fakeServerはクロスドメインとかクエリパラメータの一致を定義するの面倒とか考えてググってたらやっぱり正規表現が書けた。
server.respondWith(/\/todo-items\/(\d+)/, function (xhr, id) {
xhr.respond(200, { "Content-Type": "application/json" }, '[{ "id": ' + id + ' }]');
});
最終的にこんな感じのヘルパを用意した
stubRequest = ({pattern, method, status, response}) ->
beforeEach ->
throw 'pattern is required' unless pattern
method ?= 'GET'
status ?= 200
response ?= {}
unless @_server
@_server = sinon.fakeServer.create()
@_server.autoRespond = true
@_server.respondWith(method, pattern,
[
status
{"Content-Type": "application/json"}
JSON.stringify(response)
]
)
afterEach: ->
@_server?.restore?()
こうやって使う
describe 'Commit', ->
beforeEach ->
@commit = new Commit
stubRequest
pattern: /\/api\/commit/
method: 'POST'
it 'should post /api/commit', (done) ->
@commit.commit().done => done()
便利