4

我正在使用phantomjs-node,不幸的是,它不能很好地处理lab的测试覆盖率的东西。当我运行时lab -t 100,它试图注入__$$labCov传递给的函数page.evalute()。但是,该函数不会在它出现的代码的上下文中执行。它在虚拟浏览器的上下文中执行。

因此,在我正在测试的代码中,如果我的 PhantomJS 代码中有这个:

page.evaluate(
    function () { return 'foo'; }, 
    function (result) {
                // Do something with result here
                ph.exit();
    }
);

在第二个函数中,result应该是字符串“foo”。这就是我运行代码时发生的情况。但如果我通过 运行它lab -t 100null我会得到“幻像标准输出:ReferenceError:找不到变量:__$$labCov”。

有没有办法告诉实验室,“嘿,我知道这一行看起来像你想确保运行的代码,但真的,不要担心这里的这个小功能,它不适合你。”?

或者,有没有一种方法可以访问__$$labCov,以便我可以将其提供给沙盒功能?幻影让你这样做:

page.evaluate(
    function (__$$labCOv) { return 'foo'; }, 
    function (result) {
                // Do something with result here
                ph.exit();
    },
    __$$labCov
);

但这不起作用,因为我无法访问__$$labCov...

4

1 回答 1

2

实验室有一个小未记录的功能,您可以在其中标记代码的一部分以进行覆盖排除。它由实验室覆盖代码本身使用(因为实验室使用实验室来测试实验室)。只需用$lab:coverage:off$和包围您的代码$lab:coverage:on$

https://github.com/hapijs/lab/blob/master/lib/coverage.js#L240-L261

于 2014-10-18T07:12:14.857 回答