2011-09-17 31 views
6

Tôi muốn có 'rake thử nghiệm: đơn vị' chạy các bài kiểm tra trên cơ sở dữ liệu thử nghiệm chuẩn bị thành công trong khi cơ sở dữ liệu phát triển của tôi là xuống. Hiện tại đường ray đang cố gắng xây dựng cơ sở dữ liệu thử nghiệm từ cơ sở dữ liệu phát triển. Điều này có thể không?Rails thử nghiệm thông qua cào: không chạm vào cơ sở dữ liệu dev của tôi

Tôi đang ở trong tình huống mà cơ sở dữ liệu sản phẩm/dev của tôi không hoạt động, nhưng với mục đích kiểm tra đơn vị, tôi đang sử dụng sqlite trong cơ sở dữ liệu bộ nhớ.

EDIT cho những hành động chính xác của tôi:Note Tôi đang sử dụng Rails 2,3

cơ sở dữ liệu thử nghiệm của tôi được thiết lập như thế này trong config/database.yml:

test: 
    adapter: sqlite3 
    database: 'sqlite3_unittest_file.dat' 
    pool: 5 
    timeout: 5000 

Khi tôi chạy rake db:test:load sự cơ sở dữ liệu thử nghiệm (chỉ là một tệp) được tạo chính xác trong thư mục gốc rails. Và khi tôi chạy rake test:units, mọi thứ đều hoạt động.

Bây giờ nếu tôi chỉnh sửa database.yml để thiết lập cơ sở dữ liệu DEV tên tôi một cái gì đó sai (như 'sdlkfj'), rake test:units thất bại ngay lập tức phàn nàn:

Access denied for user 'sdlkfj'@'myhostnsmae' (using password: YES) 

Khi tôi đang chạy build này 'thật' , Tôi đang chạy nó trong một hệ thống mà các bản xây dựng không được phép nói ra khỏi hộp trong quá trình xây dựng. Do đó nỗ lực này để nói chuyện với cơ sở dữ liệu dev và ngay lập tức croaking là giết chết tôi, và có vẻ không chính xác.

+0

Thông thường, các thử nghiệm của bạn sẽ hoạt động mà không có cơ sở dữ liệu phát triển đang chạy. Bạn nên xem http://guides.rubyonrails.org/testing.html phần 3.1 và thay đổi câu hỏi của bạn để bạn đặt tên cho các bước bạn thực hiện. Dường như cơ sở dữ liệu phát triển là cần thiết ngay từ đầu và bạn không có sẵn nó. – mliebelt

+0

Đã chỉnh sửa để thêm thông tin. –

Trả lời

7

Thử chạy nhiệm vụ cào với một môi trường rõ ràng:

rake test:units RAILS_ENV=test 

Nếu bạn không chỉ định một môi trường, development được giả định, trong kinh nghiệm của tôi. Và mặc dù cơ sở dữ liệu thử nghiệm vẫn nhận được dữ liệu lịch thi đấu được chèn vào nó, các công cụ từ môi trường development vẫn được tham chiếu vì một số lý do.

+0

Đã hoạt động! Cám ơn rất nhiều. –

4

Lý do điều này không thành công là vì các thử nghiệm 'cào kiểm tra: đơn vị' trước tiên phải đảm bảo rằng cơ sở dữ liệu thử nghiệm được thiết lập đúng cách. Để làm điều đó nó gọi 'rake db: test: preparation' mà các bản sao trên lược đồ hiện tại từ cơ sở dữ liệu dev (đây là tôi đoán để đảm bảo tất cả các di chuyển đã chạy trước khi bạn chạy thử nghiệm).

Tôi đoán bạn có thể giải quyết vấn đề này theo một vài cách, một cách ghi đè tác vụ rake "db: test: preparation" đã được đề xuất trong số post trên stackoverflow này.

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