2015-04-22 23 views
6

Tôi đã tạo một lớp yêu cầu biểu mẫu và xác định một loạt các quy tắc. Bây giờ tôi muốn kiểm tra các quy tắc này để xem liệu hành vi có đáp ứng được kỳ vọng của chúng tôi hay không.Làm cách nào để kiểm tra các quy tắc yêu cầu biểu mẫu trong Laravel 5?

Làm cách nào để viết bài kiểm tra để thực hiện điều đó?

Rất cám ơn trước vì câu trả lời của bạn!

Cập nhật: chính xác hơn, tôi muốn viết một bài kiểm tra đơn vị sẽ kiểm tra ví dụ: nếu email bị định dạng sai vượt qua xác thực hay không. Vấn đề là tôi không biết cách tạo một thể hiện mới của Yêu cầu với đầu vào giả trong đó.

+1

có phản hồi tương tự tại đây: http://stackoverflow.com/questions/36978147/unit-test-laravels-formrequest –

Trả lời

2

Bạn cần có lớp yêu cầu hình thức của bạn trong hàm điều khiển, ví dụ

public function store(MyRequest $request) 

Bây giờ, tạo hình thức HTML và cố gắng để điền vào nó với các giá trị khác nhau. Nếu xác thực không thành công thì bạn sẽ nhận được tin nhắn trong phiên, nếu nó thành công thì bạn sẽ nhận được vào chức năng điều khiển.

Khi kiểm tra đơn vị sau đó gọi url và thêm giá trị để thử nghiệm dưới dạng mảng. Laravel doc nói rằng nó có thể được thực hiện như

$response = $this->call($method, $uri, $parameters, $cookies, $files, $server, $content); 
+0

Xin chào và cảm ơn câu trả lời của bạn! Nó không thực sự những gì tôi đã có trong tâm trí mặc dù: Tôi nghĩ rằng câu hỏi của tôi đã được viết khá kém nên tôi cập nhật nó. Những gì tôi đang cố gắng làm là viết một bài kiểm tra đơn vị để kiểm tra xem các quy tắc xác nhận tôi đã viết có chính xác hay không. – kant312

+0

Cải thiện câu trả lời của tôi cũng –

+0

Cảm ơn bạn! Điều đó đã làm các trick ^^ – kant312

8

Câu trả lời được chấp nhận kiểm tra cả ủy quyền và xác thực đồng thời. Nếu bạn muốn thử nghiệm những chức năng riêng biệt thì bạn có thể làm điều này:

kiểm tra rules():

$attributes = ['aa' => 'asd']; 
$request = new MyRequest(); 
$rules = $request->rules(); 
$validator = Validator::make($attributes, $rules); 
$fails = $validator->fails(); 
$this->assertEquals(false, $fails); 

kiểm tra authorize():

$user = factory(User::class)->create(); 
$this->actingAs($user); 
$request = new MyRequest(); 
$request->setContainer($this->app); 
$attributes = ['aa' => 'asd']; 
$request->initialize([], $attributes); 
$this->app->instance('request', $request); 
$authorized = $request->authorize(); 
$this->assertEquals(true, $authorized); 

Bạn nên tạo một số phương pháp helper trong lớp cơ sở để giữ kiểm tra DRY.

+0

Tùy thuộc vào cách phức tạp logic xác nhận của bạn là (ví dụ, nếu bạn đang lắp ráp mảng 'rules' thông qua mã trong lớp' Request'), bạn sẽ muốn gán mảng '$ attributes' cho lớp' Request' tùy chỉnh của bạn bằng cách thêm sau khi bạn tạo đối tượng 'Request':' $ request-> replace ($ attributes); ' – mounty

+0

Tôi gặp sự cố khi hiểu cách' Validator' nhập trong một bài kiểm tra đơn vị. Đó là một lớp mặt tiền, phải không? – Zac

+0

@ Zac: Đúng vậy. Bạn cần phải nhập Validator từ Illuminate \ Support \ Facades \ Validator. – Marco

Các vấn đề liên quan