Test
<?php
use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use App\Models\User;
use App\Models\Course;
class PaymentControllerTest extends TestCase
{
use DatabaseMigrations;
protected $user;
protected $course;
protected $payment_gate_mock;
protected function setUp()
{
parent::setUp();
$this->user = factory(User::class)->create();
$this->course = factory(Course::class)->create();
$this->payment_gate_mock = \Mockery::mock('App\Http\Controllers\Library\PaymentGate');
// I'm letting Laravel know that this class here will be mocked.
$this->app->instance('App\Http\Controllers\Library\PaymentGate', $this->payment_gate_mock);
}
/** @test */
public function a_user_can_pay_for_the_course()
{
// This is not working
$this->payment_gate_mock->shouldReceive('place_order')->andReturn(1);
$params = [
'course_id' => $this->course->id,
'staff' => 0,
'ccnumber' => 4111111111111111,
'month' => 10,
'year' => 25,
'cvv' => 999
];
$this->actingAs($this->user)
->post("/payment/course", $params)
->assertStatus(200);
}
}
Controller
<?php
namespace App\Http\Controllers\Web;
...
class PaymentController extends Controller
{
public function make_course_payment( CoursePaymentRequest $request )
{
...
$payment = new PaymentGate(...);
// This should always return 1 in the test but it doesn't
$result = $payment->place_order();
if( $result['response'] == 1) {
....
}
}
}
I'm trying to write a test for a controller which makes a request call to a third party service via a custom class called PaymentGate
.
I'm trying to get this $this->payment_gate_mock->shouldReceive('place_order')->andReturn(1);
stub to work so that I can test different scenarios for the request... but it actually attempts to make a request for some reason.
Am I missing something in my test that prevents Mockery from mocking the place_order
method?
via Chebli Mohamed
Aucun commentaire:
Enregistrer un commentaire