2011-11-24 14 views
5

Tôi đang thử nghiệm một mô hình trong CakePHP 2 và đã chế giễu một mô hình như thế này:Tạo một mô hình PHPUnit chế giễu sử dụng cơ sở dữ liệu mặc định thay vì thử nghiệm trong CakePHP

$this->User = $this->getMock('User', array(
    '_saveUploadedFile', 
    '_removeUploadedFile', 
)); 
$this->User->expects($this->any()) 
     ->method('_saveUploadedFile') 
     ->with($data, Configure::read('App.myDirectory'), true); 
     ->will($this->returnValue(true)); 
$this->User->expects($this->any()) 
     ->method('_removeUploadedFile') 
     ->with($data, Configure::read('App.myDirectory')) 
     ->will($this->returnValue(true)); 

Kể từ khi bất kỳ hoạt động với cơ sở dữ liệu làm tăng các lỗi sau:

"Database table mock__user_b6241a4cs for model User was not found." 

tôi định nghĩa lại các thông tin mô hình:

$this->User->alias = 'User'; 
$this->User->useTable = 'users'; 

Bây giờ các công trình thử nghiệm tốt, nhưng nó đang sử dụng cơ sở dữ liệu $default trong database.php thay vì $test. Điều gì có thể xảy ra?

Tại sao cấu hình cơ sở dữ liệu để kiểm tra các thay đổi khi sử dụng các đối tượng giả mạo? Nó có thể liên quan đến các điều khoản cơ sở dữ liệu gây ra đối tượng giả lập không thể tạo các bảng tùy chỉnh của nó không?

Cảm ơn!

Trả lời

2

cuối cùng tôi giải quyết vấn đề bằng cách thông qua các thông số chính xác cho các nhà xây dựng mô hình trong getMock() agument thứ ba:

$this->User = $this->getMock('User', 
    array('_saveUploadedFile', '_removeUploadedFile'), 
    array(false, 'users', 'test') 
); 

Áp dụng những gì được nói trong Stubs section của Tài liệu PHPUnit, đối số thứ ba này cho biết rằng tôi muốn sử dụng bảng users và nguồn dữ liệu test.

tôi phải tiếp tục xác định lại của alias bất động sản mặc dù:

$this->User->alias = 'User'; 

vì đơn giản $this->User->read(null, 1) đặt ra một lỗi nói rằng 'User.a_column' không thể tìm được.

Nhờ José Lorenzo.

0

Tôi chưa gặp sự cố cụ thể này trước đây, nhưng tôi tò mò nếu bạn đã thử đặt kết nối cụ thể mà bạn muốn. Vì vậy, giống như cách bạn thiết lập aliasuseTable:

$this->User->useDbConfig = 'test'; 
Các vấn đề liên quan