如何解决 运行 测试时代码覆盖率找不到函数的问题?
How to fix issue of code coverage not finding functions when run tests do?
当 运行 我的测试全部通过时。当 运行 代码覆盖率 4 由于函数 'not defined' 而失败时。它们是已定义的(正如测试在通过时清楚地显示的那样)。我无法获得在这些测试中测试了 4 个函数的文件的代码覆盖率,这不好,因为我需要知道这些函数是否经过全面测试。
我在使用 PHPStorm。这些测试的 jsTestDriver 有一个我制作的文件,Sinon v7.3.2,jQuery v1.11.1 和 D3.js v5.9.7 作为依赖项。
load:
- buttonActions.js
- tests/dependencies/jquery.js
- tests/dependencies/sinon732.js
- tests/dependencies/d3.js
test:
- tests/Functional/javascriptTests/actionsTestButtonActionsFunctions.test.js
timeout: 30
来自 buttonActions.js 的部分代码:
function _hideOrShow(table){
var classNames = table[0]["attributes"][0]['nodeValue'];
var secondClass = classNames.replace("sortable table-striped table-responsive ",'');
if (secondClass === "veryHidden" ) {
table.removeClass("veryHidden").addClass("veryShown");
} else {
table.removeClass("veryShown").addClass("veryHidden");
}
}
我测试的部分代码:
ActionsTestButton = TestCase("ActionsTestButtonActions");
ActionsTestButton.prototype.setUp = function() {
//stuff done here. Not important
}
ActionsTestButton.prototype.testHideOrShow = function () {
var table = {
class: "sortable table-striped table-responsive veryHidden",
0: {
attributes: {
0: {
nodeValue: "sortable table-striped table-responsive veryHidden"
}
}
},
removeClass: function (name){
table.class = table.class.replace(name, '');
table[0]["attributes"][0]['nodeValue'] = table.class;
return {
addClass: function (name){
table.class = table.class+name;
table[0]["attributes"][0]['nodeValue'] = table.class;
}
}
}
};
assertEquals("sortable table-striped table-responsive veryHidden", table.class);
assertEquals("sortable table-striped table-responsive veryHidden", table[0]["attributes"][0]['nodeValue']);
_hideOrShow(table);
assertEquals("sortable table-striped table-responsive veryShown", table.class);
assertEquals("sortable table-striped table-responsive veryShown", table[0]["attributes"][0]['nodeValue']);
_hideOrShow(table);
assertEquals("sortable table-striped table-responsive veryHidden", table.class);
assertEquals("sortable table-striped table-responsive veryHidden", table[0]["attributes"][0]['nodeValue']);
};
ActionsTestButton.prototype.tearDown = function() {
document.getElementById.restore();
window.$.restore();
window.d3.select.restore();
};
我收到的错误消息 运行 代码覆盖率:
line 178:4 mismatched input 'const' expecting RBRACE
line 1022:12 no viable alternative at input 'throws'
line 1236:13 mismatched input 'throws' expecting Identifier
line 1236:31 extraneous input 'throws' expecting LPAREN
line 3998:12 no viable alternative at input 'function'
line 5123:14 missing Identifier at 'in'
line 5123:17 no viable alternative at input '='
line 5413:8 no viable alternative at input '}'
line 5415:30 no viable alternative at input ']'
ReferenceError: _removeIcons is not defined
at b.ActionsTestButton.testPrivateRemoveIcons (http://127.0.0.1:9876/test/tests/Functional/javascriptTests/actionsTestButtonActionsFunctions.test.js:179:5)
at TestResultIterator.runTest (http://127.0.0.1:9876/test/com/google/jstestdriver/coverage/javascript/LCOV.js:201:28)
at TestResultIterator.runNext (http://127.0.0.1:9876/test/com/google/jstestdriver/coverage/javascript/LCOV.js:292:10)
at InstrumentedTestCaseRunner.run (http://127.0.0.1:9876/test/com/google/jstestdriver/coverage/javascript/LCOV.js:250:27)
at InstrumentedTestCaseRunnerPlugin.runTestConfiguration (http://127.0.0.1:9876/test/com/google/jstestdriver/coverage/javascript/LCOV.js:221:20)
ReferenceError: _reAddIcon is not defined
at b.ActionsTestButton.testPrivateReAddIcons (http://127.0.0.1:9876/test/tests/Functional/javascriptTests/actionsTestButtonActionsFunctions.test.js:196:5)
at TestResultIterator.runTest (http://127.0.0.1:9876/test/com/google/jstestdriver/coverage/javascript/LCOV.js:201:28)
at TestResultIterator.runNext (http://127.0.0.1:9876/test/com/google/jstestdriver/coverage/javascript/LCOV.js:292:10)
at InstrumentedTestCaseRunner.run (http://127.0.0.1:9876/test/com/google/jstestdriver/coverage/javascript/LCOV.js:250:27)
ReferenceError: _removeIcons is not defined
at b.ActionsTestButton.testRemoveThenAddRevertsBackToBlock (http://127.0.0.1:9876/test/tests/Functional/javascriptTests/actionsTestButtonActionsFunctions.test.js:214:5)
at TestResultIterator.runTest (http://127.0.0.1:9876/test/com/google/jstestdriver/coverage/javascript/LCOV.js:201:28)
at TestResultIterator.runNext (http://127.0.0.1:9876/test/com/google/jstestdriver/coverage/javascript/LCOV.js:292:10)
at InstrumentedTestCaseRunner.run (http://127.0.0.1:9876/test/com/google/jstestdriver/coverage/javascript/LCOV.js:250:27)
ReferenceError: _hideOrShow is not defined
at b.ActionsTestButton.testHideOrShow (http://127.0.0.1:9876/test/tests/Functional/javascriptTests/actionsTestButtonActionsFunctions.test.js:251:5)
at TestResultIterator.runTest (http://127.0.0.1:9876/test/com/google/jstestdriver/coverage/javascript/LCOV.js:201:28)
at TestResultIterator.runNext (http://127.0.0.1:9876/test/com/google/jstestdriver/coverage/javascript/LCOV.js:292:10)
at InstrumentedTestCaseRunner.run (http://127.0.0.1:9876/test/com/google/jstestdriver/coverage/javascript/LCOV.js:250:27)
Process finished with exit code 0
我只想获取此文件的代码覆盖率。它适用于我所有其他文件测试。只是不是这个。
JSTestDriver 中的代码覆盖率不像 let
和 const
。它不会 运行 代码覆盖任何包含它的文件,也不会允许包含它的文件中的函数。
对于我的特殊情况,我有一个使用 const
的函数。使用它的函数没有在我正在测试的函数中调用,因此根本没有被测试过。这意味着测试通过了。但是,在同一个文件中足以破坏代码覆盖率。
我的解决方案?将 let
和 const
都更改为 var
。从语义上讲,这可能不是最好的主意,但就我而言,它对我的代码或行为没有明显影响。
当 运行 我的测试全部通过时。当 运行 代码覆盖率 4 由于函数 'not defined' 而失败时。它们是已定义的(正如测试在通过时清楚地显示的那样)。我无法获得在这些测试中测试了 4 个函数的文件的代码覆盖率,这不好,因为我需要知道这些函数是否经过全面测试。
我在使用 PHPStorm。这些测试的 jsTestDriver 有一个我制作的文件,Sinon v7.3.2,jQuery v1.11.1 和 D3.js v5.9.7 作为依赖项。
load:
- buttonActions.js
- tests/dependencies/jquery.js
- tests/dependencies/sinon732.js
- tests/dependencies/d3.js
test:
- tests/Functional/javascriptTests/actionsTestButtonActionsFunctions.test.js
timeout: 30
来自 buttonActions.js 的部分代码:
function _hideOrShow(table){
var classNames = table[0]["attributes"][0]['nodeValue'];
var secondClass = classNames.replace("sortable table-striped table-responsive ",'');
if (secondClass === "veryHidden" ) {
table.removeClass("veryHidden").addClass("veryShown");
} else {
table.removeClass("veryShown").addClass("veryHidden");
}
}
我测试的部分代码:
ActionsTestButton = TestCase("ActionsTestButtonActions");
ActionsTestButton.prototype.setUp = function() {
//stuff done here. Not important
}
ActionsTestButton.prototype.testHideOrShow = function () {
var table = {
class: "sortable table-striped table-responsive veryHidden",
0: {
attributes: {
0: {
nodeValue: "sortable table-striped table-responsive veryHidden"
}
}
},
removeClass: function (name){
table.class = table.class.replace(name, '');
table[0]["attributes"][0]['nodeValue'] = table.class;
return {
addClass: function (name){
table.class = table.class+name;
table[0]["attributes"][0]['nodeValue'] = table.class;
}
}
}
};
assertEquals("sortable table-striped table-responsive veryHidden", table.class);
assertEquals("sortable table-striped table-responsive veryHidden", table[0]["attributes"][0]['nodeValue']);
_hideOrShow(table);
assertEquals("sortable table-striped table-responsive veryShown", table.class);
assertEquals("sortable table-striped table-responsive veryShown", table[0]["attributes"][0]['nodeValue']);
_hideOrShow(table);
assertEquals("sortable table-striped table-responsive veryHidden", table.class);
assertEquals("sortable table-striped table-responsive veryHidden", table[0]["attributes"][0]['nodeValue']);
};
ActionsTestButton.prototype.tearDown = function() {
document.getElementById.restore();
window.$.restore();
window.d3.select.restore();
};
我收到的错误消息 运行 代码覆盖率:
line 178:4 mismatched input 'const' expecting RBRACE
line 1022:12 no viable alternative at input 'throws'
line 1236:13 mismatched input 'throws' expecting Identifier
line 1236:31 extraneous input 'throws' expecting LPAREN
line 3998:12 no viable alternative at input 'function'
line 5123:14 missing Identifier at 'in'
line 5123:17 no viable alternative at input '='
line 5413:8 no viable alternative at input '}'
line 5415:30 no viable alternative at input ']'
ReferenceError: _removeIcons is not defined
at b.ActionsTestButton.testPrivateRemoveIcons (http://127.0.0.1:9876/test/tests/Functional/javascriptTests/actionsTestButtonActionsFunctions.test.js:179:5)
at TestResultIterator.runTest (http://127.0.0.1:9876/test/com/google/jstestdriver/coverage/javascript/LCOV.js:201:28)
at TestResultIterator.runNext (http://127.0.0.1:9876/test/com/google/jstestdriver/coverage/javascript/LCOV.js:292:10)
at InstrumentedTestCaseRunner.run (http://127.0.0.1:9876/test/com/google/jstestdriver/coverage/javascript/LCOV.js:250:27)
at InstrumentedTestCaseRunnerPlugin.runTestConfiguration (http://127.0.0.1:9876/test/com/google/jstestdriver/coverage/javascript/LCOV.js:221:20)
ReferenceError: _reAddIcon is not defined
at b.ActionsTestButton.testPrivateReAddIcons (http://127.0.0.1:9876/test/tests/Functional/javascriptTests/actionsTestButtonActionsFunctions.test.js:196:5)
at TestResultIterator.runTest (http://127.0.0.1:9876/test/com/google/jstestdriver/coverage/javascript/LCOV.js:201:28)
at TestResultIterator.runNext (http://127.0.0.1:9876/test/com/google/jstestdriver/coverage/javascript/LCOV.js:292:10)
at InstrumentedTestCaseRunner.run (http://127.0.0.1:9876/test/com/google/jstestdriver/coverage/javascript/LCOV.js:250:27)
ReferenceError: _removeIcons is not defined
at b.ActionsTestButton.testRemoveThenAddRevertsBackToBlock (http://127.0.0.1:9876/test/tests/Functional/javascriptTests/actionsTestButtonActionsFunctions.test.js:214:5)
at TestResultIterator.runTest (http://127.0.0.1:9876/test/com/google/jstestdriver/coverage/javascript/LCOV.js:201:28)
at TestResultIterator.runNext (http://127.0.0.1:9876/test/com/google/jstestdriver/coverage/javascript/LCOV.js:292:10)
at InstrumentedTestCaseRunner.run (http://127.0.0.1:9876/test/com/google/jstestdriver/coverage/javascript/LCOV.js:250:27)
ReferenceError: _hideOrShow is not defined
at b.ActionsTestButton.testHideOrShow (http://127.0.0.1:9876/test/tests/Functional/javascriptTests/actionsTestButtonActionsFunctions.test.js:251:5)
at TestResultIterator.runTest (http://127.0.0.1:9876/test/com/google/jstestdriver/coverage/javascript/LCOV.js:201:28)
at TestResultIterator.runNext (http://127.0.0.1:9876/test/com/google/jstestdriver/coverage/javascript/LCOV.js:292:10)
at InstrumentedTestCaseRunner.run (http://127.0.0.1:9876/test/com/google/jstestdriver/coverage/javascript/LCOV.js:250:27)
Process finished with exit code 0
我只想获取此文件的代码覆盖率。它适用于我所有其他文件测试。只是不是这个。
JSTestDriver 中的代码覆盖率不像 let
和 const
。它不会 运行 代码覆盖任何包含它的文件,也不会允许包含它的文件中的函数。
对于我的特殊情况,我有一个使用 const
的函数。使用它的函数没有在我正在测试的函数中调用,因此根本没有被测试过。这意味着测试通过了。但是,在同一个文件中足以破坏代码覆盖率。
我的解决方案?将 let
和 const
都更改为 var
。从语义上讲,这可能不是最好的主意,但就我而言,它对我的代码或行为没有明显影响。