Я новичок в модульном тестировании и пытаюсь протестировать метод контроллера в Laravel 5.1 и Mockery.Измерительный параметр класса, возвращающий макет
Я пытаюсь проверить метод registerEmail
я написал ниже:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Response;
use Mailchimp;
use Validator;
/**
* Class ApiController
* @package App\Http\Controllers
*/
class ApiController extends Controller
{
protected $mailchimpListId = null;
protected $mailchimp = null;
public function __construct(Mailchimp $mailchimp)
{
$this->mailchimp = $mailchimp;
$this->mailchimpListId = env('MAILCHIMP_LIST_ID');
}
/**
* @param Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function registerEmail(Request $request)
{
$this->validate($request, [
'email' => 'required|email',
]);
$email = $request->get('email');
try {
$subscribed = $this->mailchimp->lists->subscribe($this->mailchimpListId, [ 'email' => $email ]);
//var_dump($subscribed);
} catch (\Mailchimp_List_AlreadySubscribed $e) {
return Response::json([ 'mailchimpListAlreadySubscribed' => $e->getMessage() ], 422);
} catch (\Mailchimp_Error $e) {
return Response::json([ 'mailchimpError' => $e->getMessage() ], 422);
}
return Response::json([ 'success' => true ]);
}
}
Я пытаюсь издеваться объект Mailchimp работать в этой ситуации. До сих пор мой тест выглядит следующим образом:
<?php
use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;
class HomeRouteTest extends TestCase
{
use WithoutMiddleware;
public function testMailchimpReturnsDuplicate() {
$listMock = Mockery::mock('Mailchimp_Lists')
->shouldReceive('subscribe')
->once()
->andThrow(\Mailchimp_List_AlreadySubscribed::class);
$mailchimp = Mockery::mock('Mailchimp')->lists = $listMock;
$this->post('/api/register-email', ['email'=>'[email protected]'])->assertJson(
'{"mailchimpListAlreadySubscribed": "[email protected] is already subscribed to the list."}'
);
}
}
У меня есть PHPUnit возвращение неисправного тест.
HomeRouteTest :: testMailchimpReturnsDuplicate Издевательство \ Exception \ InvalidCountException: Метод подписки() из Mockery_0_Mailchimp_Lists следует назвать ровно 1 раз, но называется 0 раз.
Кроме того, если я утверждаю код состояния 422, PHPUnit сообщает он получает код состояния 200.
Это прекрасно работает, когда я проверить это вручную, но я полагаю, я с видом что-то довольно легко.
Привет. Каков ваш полный путь к классу «Mailchimp»? Не псевдоним, а полный путь с пространством имен. –
Я использую пакет skovmand/mailchimp-laravel здесь: https://github.com/skovmand/mailchimp-laravel. Класс Mailchimp находится в глобальном пространстве имен, а require_once - множество других классов в файле. – Lea
Вы издеваетесь над Mailchimp_Lists, но я не вижу, чтобы этот класс загружался в любом месте вашего контроллера. – PickYourPoison