diff --git a/lib/fake-server/index.js b/lib/fake-server/index.js index 737e58d..945a311 100644 --- a/lib/fake-server/index.js +++ b/lib/fake-server/index.js @@ -150,6 +150,7 @@ var fakeServer = { fakeHTTPMethods: true, logger: true, unsafeHeadersEnabled: true, + legacyRoutes: true, }; // eslint-disable-next-line no-param-reassign @@ -213,6 +214,8 @@ var fakeServer = { log: log, + legacyRoutes: true, + respondWith: function respondWith(method, url, body) { if (arguments.length === 1 && typeof method !== "function") { this.response = responseArray(method); @@ -250,6 +253,13 @@ var fakeServer = { // eslint-disable-next-line no-param-reassign url = url.replace(/\/\*/g, "/(.*)"); } + + if (this.legacyRoutes) { + if (url.includes("?")) { + // eslint-disable-next-line no-param-reassign + url = url.replace("?", "\\?"); + } + } } push.call(this.responses, { diff --git a/lib/fake-server/index.test.js b/lib/fake-server/index.test.js index 2f5f7b6..537c696 100644 --- a/lib/fake-server/index.test.js +++ b/lib/fake-server/index.test.js @@ -103,6 +103,15 @@ describe("sinonFakeServer", function () { "fakeServer.create should not accept 'foo' settings", ); }); + it("allows the 'legacyRoutes' setting", function () { + var server = sinonFakeServer.create({ + legacyRoutes: false, + }); + assert( + server.legacyRoutes === false, + "fakeServer.create should accept 'legacyRoutes' setting", + ); + }); }); it("fakes XMLHttpRequest", function () { @@ -898,8 +907,9 @@ describe("sinonFakeServer", function () { assert(handler.calledOnce); }); - it("yields response to request function handler when url contains RegExp characters", function () { + it("yields response to handler when url contains escaped RegExp characters in non-legacy mode", function () { var handler = sinon.spy(); + this.server.legacyRoutes = false; this.server.respondWith("GET", "/hello\\?world", handler); var xhr = new FakeXMLHttpRequest(); xhr.open("GET", "/hello?world"); @@ -910,6 +920,18 @@ describe("sinonFakeServer", function () { assert(handler.calledOnce); }); + it("yields response to handler when url contains unescaped RegExp characters in legacy mode", function () { + var handler = sinon.spy(); + this.server.respondWith("GET", "/hello?world", handler); + var xhr = new FakeXMLHttpRequest(); + xhr.open("GET", "/hello?world"); + xhr.send(); + + this.server.respond(); + + assert(handler.calledOnce); + }); + function equalMatcher(expected) { return function (test) { return expected === test;