我想测试我的 Laravel Artisan 命令。所以我需要模拟一个对象并存根这个模拟对象的方法。在我的测试中,我无法使用真实的SFTP环境。
这是handle()我的命令:
public function handle()
{
$sftp = new SFTP('my.sftpenv.com');
$sftp->login('foo', 'bar');
}
Run Code Online (Sandbox Code Playgroud)
我想在测试中模拟 SFTP:
$sftp = $this->createMock(SFTP::class);
$sftp->expects($this->any())->method('login')->with('foo', 'bar');
$this->artisan('import:foo');
Run Code Online (Sandbox Code Playgroud)
运行测试结果在 a 中Cannot connect to ...:22,它来自login的原始方法SFTP。所以mock/stub不生效。
所以我的问题是:如何在 Laravel Artisan 命令测试中模拟对象?
尝试运行php artisan queue:work会返回此错误:
ErrorException : pcntl_signal() has been disabled for security reasons
Run Code Online (Sandbox Code Playgroud)
已经pcntl_signal, pcntl_signal_dispatch从php.ini中的disable_functions中删除并重新启动,但没有效果

这是我的 Laravel 5.3 开发环境
我正在测试预定的电子邮件并运行:
php artisan schedule:run
Run Code Online (Sandbox Code Playgroud)
这工作正常并且正在按预期发送电子邮件。
但我实际上希望在 crontab 文件中包含此内容:
* * * * * php /home/test/website/artisan schedule:run >> /dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)
自从我在 crontab 文件中添加该行后,我收到了两封电子邮件。我删除了该行,所以现在只收到一封电子邮件。
但现在我想反转/撤消/停止/终止 php artisan Schedule:run 以便我可以从 crontab 文件控制计划。
我看到这篇文章:停止 Laravel 计划命令一旦启动?
但接受的答案( ps -fe | grep artisan 和 Kill PID )对我来说不起作用,因为我收到消息:
kill: (PID) - No such process
Run Code Online (Sandbox Code Playgroud)
每次我跑步
ps -fe | grep artisan
Run Code Online (Sandbox Code Playgroud)
它似乎有一个不同的 PID - 不知道我在这方面做错了什么。
我也停止了我的流浪盒,但这似乎没有任何效果。
任何建议都会很棒!
更新:以防万一将来我碰巧遇到同样的问题并再次偶然发现这个帖子 - 我无法解决这个问题,并且已经决定不再值得花更多时间来解决它 - 将忍受现在就这样吧。通过从 crontab 中删除该行,我只收到一封电子邮件,所以现在一切都很好。
我正在使用map中的函数来RouteServiceProvider操作一些路线,然后再进行进一步处理。当我在本地计算机上运行时,一切运行正常,但在生产服务器上,由于某种原因,没有调用任何地图函数。为了确保该错误不是出于某种原因出现在我自己的代码中,我使用了原始的 RouteServiceProvider.php,仅添加了一些回声以用于测试目的:
<?php
namespace App\Providers;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Route;
class RouteServiceProvider extends ServiceProvider
{
/**
* This namespace is applied to your controller routes.
*
* In addition, it is set as the URL generator's root namespace.
*
* @var string
*/
protected $namespace = 'App\Http\Controllers';
/**
* The path to the "home" route for your application.
*
* @var string
*/
public const HOME = '/home';
/**
* Define your route model bindings, …Run Code Online (Sandbox Code Playgroud) 我需要使用此命令来创建模型。
当我这样做时:
php artisan make:model Project
Run Code Online (Sandbox Code Playgroud)
我收到
[InvalidArgumentException]
There are no commands defined in the "make" namespace.
Run Code Online (Sandbox Code Playgroud)
因此,在我正在关注的教程中,这个人使用它来制作模型。
我应该怎么办?
所以,我发现我正在使用 laravel 4 并且该命令不存在。
如果没有这个 make 命令,我如何构建模型?
我在 Windows cmd 提示符下使用 Laravel 5。
我有一个非常简单的问题
php artisan serve
要启动服务器,我的命令提示符被卡住,无法执行任何其他 artisan 命令,直到我关闭命令行然后重新启动它,然后执行代码,然后启动 laravel 服务器。
有什么简单的办法吗?
我遇到了一个问题,即运行php artisan route:list会抛出 aSymfony\Component\HttpKernel\Exception\HttpException但它没有给我任何其他输出或在我能看到的任何地方记录它。
我已经尝试composer update并dump-autoload刷新路由缓存,调试也设置为true。我怎样才能获得更多关于HttpException被抛出的信息?
我希望能够在使用 artisantinker 时清除控制台,就像在使用 sqlite3 时使用.cls清除控制台一样
操作系统:Windows CLI:Git Bash / Powershell
我使用php artisan命令但看到此错误。
此错误显示在所有 artisan 命令中
Argument 2 passed to Illuminate\Routing\UrlGenerator::__construct() must be an instance of Illuminate\Http\Reque
st, null given, called in E:\appoo\vendor\laravel\framework\src\Illuminate\Routing\RoutingServiceProvider.php
on line 65
Run Code Online (Sandbox Code Playgroud)
我怎么解决这个问题?
laravel ×10
laravel-artisan ×10
php ×6
caching ×1
command ×1
laravel-4 ×1
laravel-5 ×1
queue ×1
symfony ×1
unit-testing ×1