Tôi đang viết một số xét nghiệm đơn vị để kiểm tra các điểm cuối API trong ứng dụng Laravel 5 của tôi và rất nhiều điểm cuối yêu cầu xác thực người dùng. Thay vì có cùng mã tạo tài khoản người dùng trong mọi thử nghiệm, tôi muốn xác định một đặc điểm RegistersUsers
để sử dụng trên các lớp thử nghiệm, sẽ có phương thức registerUser()
.Trait không được tìm thấy trong các thử nghiệm đơn vị Laravel 5
Cấu trúc thư mục của thư mục tests
của tôi là như vậy:
/tests
/Traits
RegistersUsers.php
TestCase.php
UserTest.php
Tôi đã namespaced TestCase.php
và UserTest.php
bằng cách thêm khai namespace này:
namespace MyappTests;
và tôi đã namespaced RegistersUsers.php
như vậy :
namespace MyappTests\Traits;
My UserTest
trông giống như thế này, với không gian tên và khai báo use
để tôi có thể tận dụng RegistersUsers
.
<?php
namespace MyappTests;
use MyappTests\Traits\RegistersUsers;
class UserTest extends TestCase
{
use RegistersUsers;
// ... rest of the class
Tuy nhiên, khi tôi chạy thử nghiệm, PHPUnit chết với lỗi nghiêm trọng:
Trait 'MyappTests\Traits\RegistersUsers' not found in /home/vagrant/demo-app-net/tests/UserTest.php on line 9
Theo như tôi có thể nói, không gian tên của tôi là chính xác và đặc điểm của tôi nên được tìm thấy. Tôi đã đi xung quanh trong vòng tròn với điều này và dường như không thể tìm ra nó.
Đó chính xác là vấn đề, tôi cho rằng nó sẽ tự động được chọn! Cảm ơn bạn! –
Hoặc sử dụng psr4, sẽ tìm thấy không gian tên Traits của bạn. – OIS
Thay đổi trên sẽ giúp giải quyết lỗi, nhưng giải pháp tốt hơn IMO là sử dụng Codeception để viết các bài kiểm tra thay vì PHPUnit trực tiếp - nó chứa rất nhiều phương thức trợ giúp để thử nghiệm các ứng dụng Laravel thực sự dễ dàng. Bao gồm ví dụ Phương thức $ I-> amLoggedAs() sẽ xác thực người dùng của bạn. Xem http://codeception.com/docs/modules/Laravel5 để biết thêm chi tiết. –