gotwarlost / istanbul-middleware

Connect middleware for server side code coverage using istanbul
Other
179 stars 96 forks source link

TypeError: Cannot set property 'covered' of undefined #7

Open JigarJoshi opened 10 years ago

JigarJoshi commented 10 years ago

I have similar set up as /test/app/, I get the coverage report, however when I attempt to drill down to file to see which line has been covered it throws following error

    {"app":"some_app_name","name":"app","hostname":"some_host_name","pid":26468,"level":30,"msg":"Express listening on port 10010","time":"2014-04-04T22:36:04.110Z","v":0}
    TypeError: Cannot set property 'covered' of undefined
        at /some_path/node_modules/istanbul/lib/report/html.js:156:66
        at Array.forEach (native)
        at annotateLines (/some_path/node_modules/istanbul/lib/report/html.js:154:28)
        at HtmlReport.Report.mix.writeDetailPage (/some_path/node_modules/istanbul/lib/report/html.js:370:9)
        at Object.render (/some_path/node_modules/istanbul-middleware/lib/core.js:211:16)
        at /some_path/node_modules/istanbul-middleware/lib/handlers.js:50:14
        at callbacks (/some_path/node_modules/express/lib/router/index.js:164:37)
        at param (/some_path/node_modules/express/lib/router/index.js:138:11)
        at pass (/some_path/node_modules/express/lib/router/index.js:145:5)
        at Router._dispatch (/some_path/node_modules/express/lib/router/index.js:173:5)

code (starter.js)

    /*jslint nomen: true */
    var nopt = require('nopt'),
        config = nopt({ coverage: Boolean }),
        istanbulMiddleware = require('istanbul-middleware'),
        coverageRequired = config.coverage,
        port = 8888;

    if (coverageRequired) {
        console.log('Turning on coverage; ensure this is not production');
        istanbulMiddleware.hookLoader('/some_path_to_root_of_app/', { verbose: true });
    }
    console.log('Starting server at: http://localhost:' + port);
    if (!coverageRequired) {
        console.log('Coverage NOT turned on, run with --coverage to turn it on');
    }
    require('./server/');

code (server/index.js relevant part of code)

    var publicDir = path.resolve(__dirname, '.', 'public');
    var istanbulMiddleware = require('istanbul-middleware');
    var url = require('url');
    var app = express();
    app.use('/coverage', istanbulMiddleware.createHandler({ verbose: true, resetOnGet: true }));
    app.use(istanbulMiddleware.createClientHandler(publicDir, {matcher: matcher}));

    function matcher(req) {
        var parsed = url.parse(req.url);
        log.info("______" + parsed);
        return parsed.pathname && parsed.pathname.match(/\.js$/) && !parsed.pathname.match(/jquery/);
    }
mkopala commented 10 years ago

I've also had the same problem. I found that removing any blank lines from my original JavaScript files fixed the issue.