所以我使用PEST 作为我的测试框架,如果我只是在helpers中定义mock,它们将不会被正确调用,因为在每次测试之后,WPCLI可能会自动加载。所以我补充道
beforeEach(function () {
$wpCliMock = \\Mockery::mock(\'alias:WP_CLI\');
$wpCliMock
->shouldReceive(\'success\')
->andReturnArg(0);
$wpCliMock
->shouldReceive(\'error\')
->andReturnArg(0);
});
在我的测试中,现在一切都正常通过了。
编辑,因为我实际上没有使用真正的WP\\U CLIsuccess
或error
like命令通常会将内容输出到STDERR或STDOUT。这意味着你的退货实际上不会退货(andReturnArg(0)
零件)。
因此,您实际上可以尝试查看传递了哪些参数,并将这些参数设置为temp env var,然后可以对其进行测试。例如:
$wpCliMock = \\Mockery::mock(\'alias:WP_CLI\');
$wpCliMock
->shouldReceive(\'error\')
->andReturnUsing(function ($message) {
putenv("ERROR_HAPPENED={$message}");
});
现在如果在代码中
\\WP_CLI::error(\'Error has happened!\');
您可以在测试中使用
$this->assertSame(\'Error has happened!\', getenv(\'ERROR_HAPPENED\'));
只需确保清理了temp env var,以免污染其他测试。