我正试图用mocha测试子进程的输出.
我的测试看起来像这样:
var should = require("should"),
exec = require("child_process").exec;
describe('users', function() {
describe('andrei', function() {
exec('id andrei', function(error, stdout, stderr) {
it('should be part of group dev', function() {
stdout.should.containEql('dev');
})
})
})
})
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是it永远不会被执行.
我可以交换代码,使exec内部使用it,然后使用done以确保以正确的顺序运行,但这意味着我必须为我想针对孩子的stdout进行的每个测试运行相同的exec.
如何it针对子进程的stdout进行多个语句?
Lou*_*uis 20
Mocha不是为运行您在问题中显示的代码而设计的.您可以将其视为分两个阶段运行.在第一阶段,它会读取所有测试文件并执行它们.它知道你的套件中有什么测试的方法是describe立即执行所有回调,每次遇到it它时,记录都是稍后运行的测试.在第二阶段,它运行测试.因此,对于摩卡可见的测试,它必须it在第一阶段看到它的调用.您显示的代码将阻止这种情况发生.
如何针对子进程的stdout使用多个it语句?
听起来你的目标是一个断言it.我不确定你为什么要在你的具体情况下这样做.同一测试中的多个断言完全没问题.无论如何,如果你必须这样做,那么你可以使用一个before钩子:
var should = require("should"),
exec = require("child_process").exec;
describe('users', function() {
describe('andrei', function() {
var captured_stdout;
before(function (done) {
exec('id andrei', function (error, stdout, stderr) {
if (error) done(error); // Handle errors.
captured_stdout = stdout;
done();
});
});
it('should be part of group dev', function() {
captured_stdout.should.containEql('dev');
});
});
});
Run Code Online (Sandbox Code Playgroud)
传递给的回调before将在父级中的所有测试之前运行describe.捕获要测试的数据captured_stdout,然后测试可以访问它并对其进行测试.
| 归档时间: |
|
| 查看次数: |
2146 次 |
| 最近记录: |