ровно 1 раз, но вызывать 0 раз.
Я прочитал документацию Laravel о насмешках, о пользовательских правилах проверки, сервисных контейнерах и поставщиках услуг, и я не могу понять, почему мне не удается успешно имитировать это правило.
Я прочитал эту тему, но изо всех сил пытаюсь связать ее со своей проблемой: «Как я могу проверить, что мое приложение использует это правило». Или я не могу это проверить?
Вот мое правило
Код: Выделить всё
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']);
}
}
Код: Выделить всё
public function register()
{
$this->app->bind(SomeRule::class, function ($app) {
return new SomeRule();
});
}
Подробнее здесь: https://stackoverflow.com/questions/573 ... in-laravel