Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Sự cố với kiểm tra cơ sở dữ liệu laravel 7.x

Trước hết, hy vọng tôi có thể giúp bạn khắc phục sự cố của mình vì tôi khá chắc rằng đó là một lỗi ngớ ngẩn mà bạn đang mắc phải ở đâu đó trong kết nối.

Vì vậy, đây là một số mẹo:

Không kiểm tra mã của bạn "gọi" mã khung lõi ...

Thay vì thực hiện (thử nghiệm đơn vị):

$request = new Request();
$request->DEF_NOM = 'test';
$request->DEF_DESCRIPTION = 'testdescriptio ajhsg ln';
$request->DEF_NBSEMAINES = 2;
$request->DEF_CONSEILS = 'jhasnciu launh sl';
$request->DEF_VISIBLE = 1;
$request->DEF_DATE_VISIBLE = Carbon::now()->toDate();
$request->COA_ID = 3;

$dfc = new DefiCoachController();
$response = $dfc->createDefiTest($request);

$this->assertDatabaseHas('cbs_defis', $request->all());

Thực hiện (kiểm tra tính năng):

$data = [
    'nom' => 'test',
    'description' => 'testdescriptio ajhsg ln',
    'nbsemaines' => 2,
    'conseils' => 'jhasnciu launh sl',
    'visible' => 1,
    'date_visible' => Carbon::now()->toDate(),
    'coa_id' => 3,
];

$response = $this->post('your_desired_url_for_this_action', $data); // This can be get, post, put or delete

$this->assertDatabaseHas('cbs_defis', $data);

Bằng cách này, bạn có thể đảm bảo rằng:

  1. URL của bạn là URL bạn muốn, không có bất kỳ lỗi đánh máy nào hoặc bất kỳ lỗi nào
  2. Bộ điều khiển đang làm những gì nó phải làm, chèn dữ liệu trong trường hợp này.
  3. Bộ điều khiển đang chèn dữ liệu bạn muốn nó chèn. Giả sử bạn có một số xử lý đằng sau rèm cửa, ở đây bạn có thể đảm bảo rằng bạn đã gửi "1 và 3" và nó đã chèn "vai trò X" (đó là một ví dụ, giả sử đó sẽ là kết quả mong muốn của bạn sau khi xử lý 1 và 3, vì vậy bạn không trực tiếp chèn 1 and 3 )
  4. luôn tránh xác nhận dữ liệu từ nơi bạn đang kiểm tra nó. Trong trường hợp của bạn, bạn đang sử dụng Request đối tượng, giả sử nó là lớp tùy chỉnh của bạn và bạn làm điều gì đó khi thực hiện $request->attribute1 = 2 , vì vậy khi bạn đọc lại dưới dạng $request->attribute1 có thể bạn đã thực hiện một số quy trình để lưu trữ nó và bạn đã sửa đổi nó ... nếu bạn đang khẳng định điều đó mà không nói rõ ràng assert that attribute1 is what I expect bạn không bao giờ khẳng định điều đó. Nếu bạn có lỗi trong mã của mình và thay vì trả về b (1 =a , 2 =b , v.v.) mã sẽ luôn vượt qua, bởi vì bạn đã lưu trữ nó như một thứ khác ngoài mong đợi, nhưng bạn đang xác nhận những gì nó đã làm (giả sử rằng lỗi của bạn trả về c thay vì b ) vì vậy bạn đang nói "tìm $request->attribute1 trong cơ sở dữ liệu "và bạn sẽ lưu trữ c thay vì b (giá trị mong đợi của bạn) và nó vẫn sẽ tìm thấy nó và vượt qua bài kiểm tra.

Không cần tạo kết nối connection mới nếu nó giống nhau ngoại trừ DB_DATABASE hoặc tương tự. Trong trường hợp đó, bạn chỉ cần xác định thông tin đó trong .env.testing hoặc trong phpunit.xml của bạn .

Ngoài ra, không cần thực hiện <server name="DB_CONNECTION" value="testing"/><env name="DB_CONNECTION" value="testing"/> . Nếu bạn thấy phpunit.xml của Laravel GitHub , bạn sẽ thấy rằng họ đã thay đổi <env> tới <server> trên 5.7+, vì vậy hãy gắn bó với phiên bản tương ứng với phiên bản của bạn. Có một sự khác biệt mặc dù bây giờ tôi không thể nhớ được, nhưng để thử nghiệm, không có vấn đề gì.

Vì vậy, hãy đảm bảo rằng bạn đã đặt đúng DB_HOST , DB_PORT , DB_USERNAMEDB_PASSWORD . Bạn có thể có cùng một máy chủ lưu trữ nhưng khác cổng hoặc bạn có thể có máy chủ và cổng giống nhau nhưng tên cơ sở dữ liệu khác nhau, nhưng tên người dùng và mật khẩu giống nhau. Vì vậy, hãy đảm bảo rằng bạn đang kết nối với cơ sở dữ liệu chính xác.

Vì lỗi của bạn là nó không thể tìm thấy bảng mong muốn, rõ ràng là bạn đang kết nối với cơ sở dữ liệu, vì vậy tên người dùng và mật khẩu không phải là vấn đề của bạn, nhưng bảng không tồn tại.

Một điều quan trọng cuối cùng, bạn có đang sử dụng đặc điểm nào trong các bài kiểm tra của mình không? Có một số đặc điểm để tự động di chuyển cơ sở dữ liệu và khôi phục cơ sở dữ liệu khi hoàn tất, vì vậy bạn không cần phải đồng bộ hóa quá trình di chuyển của mình theo cách thủ công trong môi trường thử nghiệm. Bạn nên sử dụng use RefreshDatabase; đặc điểm để làm như vậy.

Mẹo cuối cùng, cố gắng tránh làm DEF_SOMETHING bởi vì:

  1. Nếu bộ điều khiển của bạn có liên quan đến Defi , không cần phải nói "đây là dữ liệu DEF", chúng tôi đã biết, vì vậy bạn có thể trực tiếp làm something . Tương tự đối với cơ sở dữ liệu, nếu tên bảng là cars , tránh làm car_wheels , car_doors , v.v., làm wheels , doors , v.v.
  2. Tránh làm X_Y , thích làm x_y , tương tự cho cơ sở dữ liệu. Luôn chú ý đến chữ thường và đối với cơ sở dữ liệu, hãy chú ý đến snake_case , nhưng đối với các thuộc tính của mô hình, hãy luôn gắn vào camelCase . ( thông tin khác về các trường hợp)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách nối các bảng với nhau - SQL

  2. tạm thời vô hiệu hóa quyền truy cập từ xa mysql

  3. Trả về các hàng trong đó cột khớp với tất cả các giá trị trong một tập hợp

  4. cách sử dụng phiên và mảng trong truy vấn cơ sở dữ liệu để lưu trữ và hiển thị dữ liệu

  5. My MySQL trigger không hoạt động, cú pháp đơn giản, không phức tạp