mirror of
https://github.com/prymitive/karma
synced 2026-05-07 03:26:52 +00:00
Merge pull request #1093 from prymitive/ui-coverage
fix(tests): include typescript in jest coverage
This commit is contained in:
@@ -69,8 +69,8 @@
|
||||
},
|
||||
"jest": {
|
||||
"collectCoverageFrom": [
|
||||
"src/**/*.{js,jsx}",
|
||||
"!src/**/*.stories.{js,jsx}"
|
||||
"src/**/*.{js,jsx,tsx}",
|
||||
"!src/**/*.stories.{js,jsx,tsx}"
|
||||
]
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -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();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -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 = [];
|
||||
|
||||
@@ -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")
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user