Skip to content

Commit 999552f

Browse files
author
Cameron Cundiff
committed
Only log distinct new errors
- Check equality of stringified violations to see if we've already had a warning with that signature.
1 parent 1cbbe4c commit 999552f

File tree

6 files changed

+61
-10
lines changed

6 files changed

+61
-10
lines changed

src/auditor.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
import { axe } from "axe-core/axe.min.js";
22
import report from "./reporter";
33

4-
export default function(target) {
4+
export default function(target, logger) {
55
const options = {
66
"rules": {
77
"color-contrast": { enabled: false },
88
}
99
};
1010

1111
window.axe.a11yCheck(target.parentNode, options, (results) => {
12-
report(results);
12+
report(results, logger);
1313
});
1414
}

src/index.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
import auditor from "./auditor.js";
2+
import Logger from "./logger";
23

34
(function() {
5+
var logger = new Logger();
6+
47
var load = function() {
58
window.removeEventListener("load", load, false);
6-
auditor(document);
9+
auditor(document, logger);
710
};
811

912
var observer = new MutationObserver(function(mutations) {
1013
mutations.forEach(function(mutation) {
11-
auditor(mutation.target);
14+
auditor(mutation.target, logger);
1215
});
1316
});
1417

src/logger.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
export default class Logger {
2+
constructor() {
3+
this.logged = []
4+
}
5+
6+
warn(violation) {
7+
if(!this.exists(violation)) {
8+
console.warn(violation);
9+
this.logged.push(violation);
10+
}
11+
}
12+
13+
exists(violation) {
14+
let exists = false;
15+
16+
this.logged.forEach(function(entry) {
17+
if (JSON.stringify(entry) === JSON.stringify(violation)) {
18+
exists = true;
19+
}
20+
});
21+
22+
return exists;
23+
}
24+
}

src/reporter.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,15 @@ import request from "browser-request";
22

33
const url = "/access_lint/errors";
44

5-
export default function(message) {
5+
export default function(message, logger) {
6+
67
var violations = message.violations.map(function(violation) {
78
return {
89
description: violation.description,
910
help: violation.help,
1011
impact: violation.impact,
1112
nodes: violation.nodes.map(function(n) {
12-
return document.querySelectorAll(n.target);
13+
return document.querySelector(n.target);
1314
}),
1415
};
1516
});
@@ -26,6 +27,8 @@ export default function(message) {
2627
}
2728
}, function() {});
2829

29-
console.warn(violations);
30+
violations.forEach(function(violation) {
31+
logger.warn(violation);
32+
});
3033
}
3134
}

test/unit/auditor_test.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ let expect = chai.expect;
88

99
import auditor from "../../src/auditor";
1010
import report from "../../src/reporter";
11+
import Logger from "../../src/logger";
1112

1213
describe("auditor", () => {
1314
it("runs axe-core tests", () => {
@@ -30,10 +31,11 @@ describe("report", () => {
3031
nodes: []
3132
}]
3233
};
33-
sinon.spy(console, "warn");
34+
let logger = new Logger();
35+
sinon.spy(logger, "warn");
3436

35-
report(results);
37+
report(results, logger);
3638

37-
expect(console.warn).to.have.been.called.once;
39+
expect(logger.warn).to.have.been.called.once;
3840
});
3941
});

test/unit/logger_test.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
let chai = require("chai");
2+
let sinon = require("sinon");
3+
let sinonChai = require("sinon-chai");
4+
chai.use(sinonChai);
5+
let expect = chai.expect;
6+
7+
import Logger from "../../src/logger";
8+
9+
describe("warn", () => {
10+
it("logs to console.warn", () => {
11+
let logger = new Logger();
12+
sinon.spy(console, "warn");
13+
logger.warn("example");
14+
logger.warn("example");
15+
16+
expect(console.warn).to.be.have.been.calledWith("example");
17+
expect(console.warn).to.be.have.been.calledOnce;
18+
});
19+
});

0 commit comments

Comments
 (0)