On Github pahund / lessons-learned
Patrick Hund, software developer at mobile.de
Germany's biggest automotive ecommerce platform
part of since 2004
10.81M visitors / month
(AGOF Digital Facts 2015-06)
~300 requests / second
high traffic:Service-oriented Architecture (SOA)
Service-oriented Architecture (SOA)
config.js
const path = "./makes.json"
export default {
    path
};
                        
                            makes.js
import config from "./config";
const data = require(config.path);
function get(segment) {
    return data[segment];
}
export default {
    get
};
                        
                    makes-test.js
import chai from "chai";
import makes from "./makes";
chai.should();
let result = null;
describe("When I use the makes module", () => {
    describe("to get car makes", () => {
        before(() => result = makes.get("cars"));
        describe("the result", () => {
            it("is a list of car makes", () => {
                result[0].name.should.equal("Abarth");
                result[1].name.should.equal("AC");
                result[2].name.should.equal("Acura");
            });
        });
    });
});
                        
                    config.js
const path = "./makes.json"
export default {
    getPath() {
        return path;
    }
};
                        
                    makes.js
import config from "./config";
let data = null;
function init() {
    data = require(config.getPath());
}
function get(segment) {
    return data ? data[segment] : null;
}
export default {
    init,
    get
};
                        
                    makes-test.js
import chai from "chai";
import sinon from "sinon";
import config from "./config";
import makes from "./makes";
chai.should();
let result = null;
describe("When I use the makes module", () => {
    describe("to get car makes", () => {
        before(() => {
            sinon.stub(config, "getPath").returns("./test-makes.json");
            makes.init();
            result = makes.get("cars");
        });
        describe("the result", () => {
            it("is a list of car makes", () => {
                result[0].name.should.equal("CarMake1");
                result[1].name.should.equal("CarMake2");
                result[2].name.should.equal("CarMake3");
            });
        });
        after(() => config.getPath.restore());
    });
});
                        
                    Patrick Hund Software developer at mobile.de
Follow me on Twitter: @wiekatz
Slides available on GitHub: pahund.github.io/lessons-learned
Visit the eBay Technology Europe blog: technology.ebay.de
Cross stitch headlines made with Photofunia