How to fix issue of code coverage not finding functions when run tests do?

我是研究僧i 提交于 2019-12-13 02:56:53

问题


When running my tests they all pass. When running code coverage 4 fail due to functions being 'not defined'. They are defined (as the tests clearly show when they pass). I cannot get the code coverage for the file that has the 4 functions being tested in those tests which is not good as I need to know if the functions are fully tested.

I am on PHPStorm. The jsTestDriver for these tests has a file made by me, Sinon v7.3.2, jQuery v1.11.1, and D3.js v5.9.7 as dependencies.

load:
  - buttonActions.js
  - tests/dependencies/jquery.js
  - tests/dependencies/sinon732.js
  - tests/dependencies/d3.js

test:
  - tests/Functional/javascriptTests/actionsTestButtonActionsFunctions.test.js

timeout: 30

Partial code from 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");
}

}

Partial code from my tests:

 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();

 };

Error message I get running code coverage:

     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

I just want to get code coverage for this file. It works for all my other file tests. Just not this one.


回答1:


Code coverage in JSTestDriver does not like let and const. It will not run code coverage on any files that contain it and will not allow functions from a file that contains it.

For my particular case I had a function that used const. The function that used it was not called in the functions I was testing and thus was never tested at all. This meant the tests passed. However, being in the same file was enough to make code coverage break.

My solution? Change both let and const to var. Semantically it may not be the best idea but in my case it made no noticeable difference to my code or the behaviour.



来源:https://stackoverflow.com/questions/57379043/how-to-fix-issue-of-code-coverage-not-finding-functions-when-run-tests-do

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!