gpt4 book ai didi

javascript - 使用 Mocha : app. 日志测试 flatiron cli 应用程序未定义?

转载 作者:行者123 更新时间:2023-11-28 20:46:02 25 4
gpt4 key购买 nike

我在测试 flatiron 时遇到问题cli appMocha .

我想测试的命令行命令会创建一个目录并使用 app.log.info 记录成功。

这是要测试的代码(./lib/commands/create.js):

var flatiron = require('flatiron'),
app = flatiron.app,
fs = require('fs'),
path = require('path');

module.exports = function create(name, callback) {
"use strict";
fs.mkdir('./' + name);
app.log.info('Directory created!');
}

这是测试 (./test/create.js):

var create = require('../lib/commands/create');

describe('Flatiron command', function () {
"use strict";
describe('#create()', function () {
it('should create a directory ', function () {
create('someDirectory');
// check if the directory was created,
// then remove the directory
});
});
});

mocha test/log -R spec 给我

  Flatiron command
#log()
1) should log something


✖ 1 of 1 tests failed:

1) Flatiron command #create() should create a directory :
TypeError: Cannot call method 'info' of undefined

为什么 app.log 对 Mocha 不可用?

这是因为函数日志的导出方式吗?

或者这与熨斗如何设置应用程序有关?我尝试要求 flatiron.app 并像这样从测试开始

var create = require('../lib/commands/create'),
flatiron = require('flatiron'),
app = flatiron.app;

describe('Flatiron command', function () {
"use strict";
describe('#create()', function () {
it('should create a directory ', function () {
app.start();
create('someDirectory');
});
});
});

- 但没有成功,只是一个不同的错误:

  Flatiron command
#create()
1) should create a directory


✖ 1 of 1 tests failed:

1) Flatiron command #create() should create a directory :
TypeError: Object [object Object] has no method 'start'

或者在这种情况下,您可以将 spies/stubs/mocks 与 sinon.js 之类的东西一起使用以某种方式模拟 app.log 的行为?因为我对日志记录是否有效并不感兴趣,但目录是否已创建。

最佳答案

好的,我明白了。

使用 app.start() 并不完全是这样 - 但它可以与 app.init() 一起使用。在 flatiron 中,通常通过将 flatiron.plugins.cli 插入 app.use() 从主文件中调用 app.init()像这样:

var flatiron = require('flatiron'), 
path = require('path'),
app = flatiron.app;

app.config.file({ file: path.join(__dirname, '..', 'config', 'config.json') });

app.use(flatiron.plugins.cli, {
dir: path.join(__dirname, '..', 'lib', 'commands'),
usage: 'Empty Flatiron Application, please fill out commands'
});
app.start();

调用 app.init() sets up loggingwinston ,熨斗日志插件。

但是您可以从测试中调用 app.init() 而无需在测试之后调用 app.start()。所以这有效:

var create = require('../lib/commands/create'),
flatiron = require('flatiron'),
app = flatiron.app;

describe('Flatiron command', function () {
"use strict";
describe('#create()', function () {
it('should create a directory ', function () {
app.init();
create('someDirectory');
});
});
});

Mocha 甚至负责日志记录:

  Flatiron command
#create()
◦ should create a directory : info: Directory created!
✓ should create a directory (48ms)


✔ 1 tests complete (50ms)

如果您想停止日志记录,可以在调用 app.init() 之后使用 app.log.loggers.default.remove(winston.transports.Console) 。您必须要求 winston 执行此操作。

关于javascript - 使用 Mocha : app. 日志测试 flatiron cli 应用程序未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9750277/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com