Merge pull request #1093 from prymitive/ui-coverage

fix(tests): include typescript in jest coverage
This commit is contained in:
Łukasz Mierzwa
2019-10-27 22:25:56 +00:00
committed by GitHub
5 changed files with 64 additions and 27 deletions

View File

@@ -69,8 +69,8 @@
},
"jest": {
"collectCoverageFrom": [
"src/**/*.{js,jsx}",
"!src/**/*.stories.{js,jsx}"
"src/**/*.{js,jsx,tsx}",
"!src/**/*.stories.{js,jsx,tsx}"
]
},
"devDependencies": {

View File

@@ -51,12 +51,17 @@ const ParseDefaultFilters = settingsElement => {
return defaultFilters;
};
const ParseUIDefaults = b64data => {
const decoded = Buffer.from(b64data, "base64").toString("ascii");
const ParseUIDefaults = defaultsElement => {
if (defaultsElement === null) {
return null;
}
const decoded = Buffer.from(defaultsElement.innerHTML, "base64").toString(
"ascii"
);
try {
return JSON.parse(decoded);
} catch {
return undefined;
return null;
}
};

View File

@@ -138,12 +138,17 @@ describe("ParseDefaultFilters()", () => {
describe("ParseUIDefaults()", () => {
it("parses base64 encoded JSON with defaults", () => {
const uiDefaults = ParseUIDefaults(DefaultsBase64);
const uiDefaults = ParseUIDefaults({ innerHTML: DefaultsBase64 });
expect(uiDefaults).toStrictEqual(DefaultsObject);
});
it("returns undefined on invalid JSON", () => {
const uiDefaults = ParseUIDefaults("e3h4eC9mZgo=");
expect(uiDefaults).toBeUndefined();
it("returns null on null element", () => {
const uiDefaults = ParseUIDefaults(null);
expect(uiDefaults).toBeNull();
});
it("returns null on invalid JSON", () => {
const uiDefaults = ParseUIDefaults({ innerHTML: "e3h4eC9mZgo=" });
expect(uiDefaults).toBeNull();
});
});

View File

@@ -1,11 +1,45 @@
import { EmptyAPIResponse } from "__mocks__/Fetch";
import { DefaultsBase64 } from "__mocks__/Defaults";
it("renders without crashing", () => {
jest.spyOn(document, "getElementById").mockImplementationOnce(() => {
return {
innerHTML: `<div id="defaults">${DefaultsBase64}</div>`
};
const settingsElement = {
dataset: {
sentryDsn: "",
version: "1.2.3",
defaultFiltersBase64: "WyJmb289YmFyIiwiYmFyPX5iYXoiXQ=="
}
};
it("renders without crashing with missing defaults div", () => {
const root = document.createElement("div");
jest.spyOn(global.document, "getElementById").mockImplementation(name => {
return name === "settings"
? settingsElement
: name === "defaults"
? null
: name === "root"
? root
: null;
});
const response = EmptyAPIResponse();
response.filters = [];
fetch.mockResponse(JSON.stringify(response));
const Index = require("./index.tsx");
expect(Index).toBeTruthy();
expect(root.innerHTML).toMatch(/data-filters="foo=bar bar=~baz"/);
});
it("renders without crashing with defaults present", () => {
const root = document.createElement("div");
jest.spyOn(global.document, "getElementById").mockImplementation(name => {
return name === "settings"
? settingsElement
: name === "defaults"
? {
innerHTML: DefaultsBase64
}
: name === "root"
? root
: null;
});
const response = EmptyAPIResponse();
response.filters = [];

View File

@@ -17,25 +17,18 @@ import {
} from "./AppBoot";
import { App } from "./App";
let uiDefaults;
const defaultsElement = document.getElementById("defaults");
if (defaultsElement !== null) {
uiDefaults = ParseUIDefaults(defaultsElement.innerHTML);
}
const settingsElement = SettingsElement();
SetupSentry(settingsElement);
SetupSentry(SettingsElement());
// global timer for updating timestamps to human readable offsets
// this needs to be run before any <Moment/> instance
// https://www.npmjs.com/package/react-moment#pooled-timer
Moment.startPooledTimer();
const defaultFilters = ParseDefaultFilters(settingsElement);
// https://wetainment.com/testing-indexjs/
export default ReactDOM.render(
<App defaultFilters={defaultFilters} uiDefaults={uiDefaults} />,
document.getElementById("root") || document.createElement("div")
<App
defaultFilters={ParseDefaultFilters(SettingsElement())}
uiDefaults={ParseUIDefaults(document.getElementById("defaults"))}
/>,
document.getElementById("root")
);