运行Jasmine测试时如何查看`console.log`的输出

时间:2019-01-22 17:13:04

标签: node.js jasmine console.log

我已经开发了Node.js模块,并且正在使用Jasmine为其编写单元测试。当将console.log参数设置为true时,模块在执行时使用verbose打印一些信息。

假设模块看起来像这样:

foo.js

function foo(arg1, verbose){
    var output = "Hello " + arg1;
    if(verbose)console.log("Returning %s", output);
    return output;
}
module.exports = foo;

假设我的测试如下:

foo-spec.js

const foo = require("path/to/foo")
describe("Foo suite", () => {

    it( "Expect foo to greet", () => {
        expect(foo("World", true)).toBe("Hello World");
    });
});

我通过在终端中输入jasmine来运行测试:

$ jasmine

一切正常,但我希望看到详细的输出。

$ jasmine
Returning Hello World

有没有办法让茉莉花做到这一点?

1 个答案:

答案 0 :(得分:1)

好的,我已经找到一种解决方法。暗中监视console.log进行了修补。

foo-spec.js

const foo = require("path/to/foo")
describe("Foo suite", () => {

    //This makes the log visible again from the command line.
    spyOn(console, 'log').and.callThrough();

    it( "Expect foo to greet", () => {
        expect(foo("World", true)).toBe("Hello World");
    });
});

不知道为什么,但是spyOn使日志再次可见。即使我实际上并没有做任何事情,除了调用callThrough之外。我最好的猜测是,这样做实际上是从茉莉花工艺中调用console.log