forked from MapComplete/MapComplete
Add fakedom to test UI code, replace all 'innerText' with 'textContent' as it is not compatible with fakedom
This commit is contained in:
parent
b0b674b2fb
commit
0f66d7f8cc
17 changed files with 281 additions and 20 deletions
|
@ -9,7 +9,7 @@ import {exec} from "child_process";
|
|||
*/
|
||||
function detectInCode(forbidden: string, reason: string) {
|
||||
|
||||
const excludedDirs = [".git", "node_modules", "dist", ".cache", ".parcel-cache", "assets", "vendor"]
|
||||
const excludedDirs = [".git", "node_modules", "dist", ".cache", ".parcel-cache", "assets", "vendor", ".idea/"]
|
||||
|
||||
exec("grep -n \"" + forbidden + "\" -r . " + excludedDirs.map(d => "--exclude-dir=" + d).join(" "), ((error, stdout, stderr) => {
|
||||
if (error?.message?.startsWith("Command failed: grep")) {
|
||||
|
@ -40,6 +40,10 @@ describe("Code quality", () => {
|
|||
it("should not contain 'constructor.name'", () => {
|
||||
detectInCode("constructor\\.name", "This is not allowed, as minification does erase names.")
|
||||
})
|
||||
|
||||
it("should not contain 'innerText'", () => {
|
||||
detectInCode("innerText", "innerText is not allowed as it is not testable with fakeDom. Use 'textContent' instead.")
|
||||
})
|
||||
|
||||
})
|
||||
|
||||
|
|
45
test/UI/Popup/TagRenderingQuestion.spec.ts
Normal file
45
test/UI/Popup/TagRenderingQuestion.spec.ts
Normal file
|
@ -0,0 +1,45 @@
|
|||
import {describe} from 'mocha'
|
||||
import {TagRenderingConfigJson} from "../../../Models/ThemeConfig/Json/TagRenderingConfigJson";
|
||||
import TagRenderingConfig from "../../../Models/ThemeConfig/TagRenderingConfig";
|
||||
import TagRenderingQuestion from "../../../UI/Popup/TagRenderingQuestion";
|
||||
import {UIEventSource} from "../../../Logic/UIEventSource";
|
||||
import { expect } from 'chai';
|
||||
|
||||
describe("TagRenderingQuestion", () => {
|
||||
|
||||
it("should have a freeform text field with the user defined placeholder", () => {
|
||||
|
||||
const configJson = <TagRenderingConfigJson>{
|
||||
id: "test-tag-rendering",
|
||||
question: "Question?",
|
||||
render: "Rendering {capacity}",
|
||||
freeform: {
|
||||
key: "capacity",
|
||||
type: "pnat",
|
||||
placeholder: "Some user defined placeholder"
|
||||
}
|
||||
}
|
||||
const config = new TagRenderingConfig(configJson, "test")
|
||||
const ui = new TagRenderingQuestion( new UIEventSource<any>({}), config)
|
||||
const html = ui.ConstructElement()
|
||||
expect(html.getElementsByTagName("input")[0]["placeholder"]).eq("Some user defined placeholder")
|
||||
})
|
||||
|
||||
it("should have a freeform text field with a type explanation", () => {
|
||||
|
||||
const configJson = <TagRenderingConfigJson>{
|
||||
id: "test-tag-rendering",
|
||||
question: "Question?",
|
||||
render: "Rendering {capacity}",
|
||||
freeform: {
|
||||
key: "capacity",
|
||||
type: "pnat",
|
||||
}
|
||||
}
|
||||
const config = new TagRenderingConfig(configJson, "test")
|
||||
const ui = new TagRenderingQuestion( new UIEventSource<any>({}), config)
|
||||
const html = ui.ConstructElement()
|
||||
expect(html.getElementsByTagName("input")[0]["placeholder"])
|
||||
.eq("capacity (a positive, whole number)")
|
||||
})
|
||||
})
|
|
@ -1,11 +1,17 @@
|
|||
import ScriptUtils from "../scripts/ScriptUtils";
|
||||
import {Utils} from "../Utils";
|
||||
import * as fakedom from "fake-dom"
|
||||
|
||||
export const mochaHooks = {
|
||||
|
||||
beforeEach(done) {
|
||||
ScriptUtils.fixUtils();
|
||||
|
||||
|
||||
if (fakedom === undefined || window === undefined) {
|
||||
throw "FakeDom not initialized"
|
||||
}
|
||||
|
||||
|
||||
// Block internet access
|
||||
const realDownloadFunc = Utils.externalDownloadFunction;
|
||||
Utils.externalDownloadFunction = async (url) => {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue