diff --git a/packages/driver/test/cypress/fixtures/null.json b/packages/driver/test/cypress/fixtures/null.json
new file mode 100644
index 000000000000..19765bd501b6
--- /dev/null
+++ b/packages/driver/test/cypress/fixtures/null.json
@@ -0,0 +1 @@
+null
diff --git a/packages/driver/test/cypress/fixtures/valid.json b/packages/driver/test/cypress/fixtures/valid.json
new file mode 100644
index 000000000000..28f84c440dc1
--- /dev/null
+++ b/packages/driver/test/cypress/fixtures/valid.json
@@ -0,0 +1,6 @@
+{
+ "foo": 1,
+ "bar": {
+ "baz": "cypress"
+ }
+}
diff --git a/packages/driver/test/cypress/fixtures/xhr-triggered.html b/packages/driver/test/cypress/fixtures/xhr-triggered.html
new file mode 100644
index 000000000000..99f443d18376
--- /dev/null
+++ b/packages/driver/test/cypress/fixtures/xhr-triggered.html
@@ -0,0 +1,19 @@
+
+
+
+ jQuery 3.2.1 Fixture
+
+
+
+
+ Result
+
+
+
diff --git a/packages/driver/test/cypress/integration/commands/xhr_spec.coffee b/packages/driver/test/cypress/integration/commands/xhr_spec.coffee
index e91527ac5119..e3a7dc22c65c 100644
--- a/packages/driver/test/cypress/integration/commands/xhr_spec.coffee
+++ b/packages/driver/test/cypress/integration/commands/xhr_spec.coffee
@@ -1426,6 +1426,37 @@ describe "src/cy/commands/xhr", ->
}
})
+ describe "response fixtures", ->
+ it "works if the JSON file has an object", ->
+ cy
+ .server()
+ .route({
+ method: 'POST',
+ url: '/test-xhr',
+ response: 'fixture:valid.json',
+ })
+ .visit('/fixtures/xhr-triggered.html')
+ .get('#trigger-xhr')
+ .click()
+
+ cy
+ .contains("#result", '{"foo":1,"bar":{"baz":"cypress"}}').should('be.visible')
+
+ it "works if the JSON file has null content", ->
+ cy
+ .server()
+ .route({
+ method: 'POST',
+ url: '/test-xhr',
+ response: 'fixture:null.json',
+ })
+ .visit('/fixtures/xhr-triggered.html')
+ .get('#trigger-xhr')
+ .click()
+
+ cy
+ .contains('#result', '""').should('be.visible')
+
describe "errors", ->
beforeEach ->
Cypress.config("defaultCommandTimeout", 50)
diff --git a/packages/server/lib/controllers/xhrs.coffee b/packages/server/lib/controllers/xhrs.coffee
index b6462ca8c3a4..8802a713a45d 100644
--- a/packages/server/lib/controllers/xhrs.coffee
+++ b/packages/server/lib/controllers/xhrs.coffee
@@ -50,6 +50,11 @@ module.exports = {
if _.isObject(data)
data = JSON.stringify(data)
+ ## when data is null, JSON.stringify returns null.
+ ## handle that case.
+ if data is null
+ data = ''
+
chunk = Buffer.from(data, encoding)
headers["content-length"] = chunk.length