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