[英]Laravel how to mock SoapClient response for custom validation rule
[英]How to mock a Validation Rule in Laravel
我想模擬自定義驗證規則(例如App \\ Rules \\ SomeRule)。 但是當我運行我的測試時,它會給出一個Mockery\\Exception\\InvalidCountException: Method...should be called exactly 1 times but called 0 times.
我已經閱讀了Laravel 關於Mocking的文檔, 關於自定義驗證規則 , 服務容器 , 服務提供商 ,我無法弄清楚為什么我沒有成功嘲笑規則。
我讀了這個帖子,但是我很難將它與我的問題聯系起來,即“如何測試我的應用程序是否正在使用此規則”。 或者是我無法測試的東西?
這是我的規則
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
class SomeRule implements Rule
{
public function passes($attribute, $value)
{
// some logic, returns TRUE if valid.
}
public function message()
{
//
}
}
我的控制器
namespace App\Http\Controllers;
use App\Rules\SomeRule;
use Illuminate\Http\Request;
class LoanController extends Controller
{
public function store(Request $request)
{
$request->validate([
'email' => ['required', new SomeRule]
]);
// ...insert in database, return json.
}
}
我的測試
namespace Tests\Feature;
use Mockery;
use Tests\TestCase;
use Illuminate\Foundation\Testing\RefreshDatabase;
use App\Rules\SomeRule;
class LoansTest extends TestCase
{
use RefreshDatabase;
public function tearDown(): void
{
parent::tearDown();
Mockery::close();
}
/** @test */
public function the_sad_path__when_email_is_invalid()
{
$rule = Mockery::mock(SomeRule::class)->shouldReceive('passes')->once();
$this->app->instance(SomeRule::class, $rule);
$response = $this->json('POST', '/api/loans', ['email' => 'whatevs@gmail.com']);
}
}
我玩了在AppServiceProvider中注冊SomeRule的想法。 但那仍然沒有做任何事情:
public function register()
{
$this->app->bind(SomeRule::class, function ($app) {
return new SomeRule();
});
}
Github中的代碼
你需要像這樣使用
class LoanController extends Controller
{
public function store(Request $request)
{
$request->validate([
'email' => ['required', new SomeRule()]
]);
// ...insert in database, return json.
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.