outputcache
Version:
Cache api responses, react and more using redis, memcached or any other cache provider.
101 lines (85 loc) • 3.5 kB
JavaScript
var request = require("supertest");
var requireNew = require("require-new");
var express = require("express");
var app = express();
var OutputCache = requireNew("../src/outputcache");
var cache = new OutputCache({ varyByQuery: ["hello", "foo"], allowSkip: false, skip3xx: true, skip4xx: true, skip5xx: true });
app.get("/GetHtmlNoSkip", cache.middleware, function (req, res) {
res.status(200).send("<html></html>");
});
app.get("/GetHtmlSkip3xx", cache.middleware, function (req, res, next) {
res.status(301).send("<html></html>");
});
app.get("/GetHtmlSkip4xx", cache.middleware, function (req, res, next) {
res.status(404).send("<html></html>");
});
app.get("/GetHtmlSkip5xx", cache.middleware, function (req, res, next) {
res.status(500).send("<html></html>");
});
describe("Disable cache deliberate cache skip via request", function () {
it("disable cache skip with allowSkip property", function (done) {
request(app)
.get("/GetHtmlNoSkip?cache=false")
.set("Accept", "text/html")
.expect("Content-Type", /html/)
.expect("X-Output-Cache", /ms/)
.expect(200, "<html></html>", function () {
request(app)
.get("/GetHtmlNoSkip?cache=false")
.set("Accept", "text/html")
.expect("Content-Type", /html/)
.expect("X-Output-Cache", /ht 600/)
.expect(200, "<html></html>", done);
});
});
});
describe("skip cache for specific status codes", function () {
it("cache skip for 301 when skip3xx is true", function (done) {
//cache miss
request(app)
.get("/GetHtmlSkip3xx")
.set("Accept", "text/html")
.expect("Content-Type", /html/)
.expect("X-Output-Cache", /ms/)
.expect(301, "<html></html>", function () {
request(app)
.get("/GetHtmlSkip3xx")
.set("Accept", "text/html")
.expect("Content-Type", /html/)
.expect("X-Output-Cache", /ms/)
.expect(301, "<html></html>", done);
});
});
it("cache skip for 404 when skip4xx is true", function (done) {
//cache miss
request(app)
.get("/GetHtmlSkip4xx")
.set("Accept", "text/html")
.expect("Content-Type", /html/)
.expect("X-Output-Cache", /ms/)
.expect(404, "<html></html>", function () {
request(app)
.get("/GetHtmlSkip4xx")
.set("Accept", "text/html")
.expect("Content-Type", /html/)
.expect("X-Output-Cache", /ms/)
.expect(404, "<html></html>", done);
});
});
it("cache skip for 500 when skip5xx is true", function (done) {
//cache miss
request(app)
.get("/GetHtmlSkip5xx")
.set("Accept", "text/html")
.expect("Content-Type", /html/)
.expect("X-Output-Cache", /ms/)
.expect(500, "<html></html>", function () {
request(app)
.get("/GetHtmlSkip5xx")
.set("Accept", "text/html")
.expect("Content-Type", /html/)
.expect("X-Output-Cache", /ms/)
.expect(500, "<html></html>", done);
});
});
});