2010-06-15 23 views
7

Vì vậy, tôi đang ở môi trường thử nghiệm của tôiRuby on Rails: Dưa chuột: cách đặt lại db sau mỗi trường hợp?

bây giờ, trong terminial, rake db: kiểm tra: chuẩn bị xóa db ... nhưng không phải khi tôi chạy nó từ mã

Và tôi có điều này trong các tính năng /support/env.rb:

Before do 
    task :build_all do 
     [ :debug, :release ].each do |t| 
     $build_type = t 
     Rake::Task["db:test:prepare"].reenable 
     Rake::Task["db:test:prepare"].invoke 
     end 
    end 
end 

Nhưng dữ liệu của tôi vẫn còn trong db project_test khi thử nghiệm của tôi được thực hiện chạy

Đây là trong database.yml tôi

test: 
    adapter: mysql 
    encoding: utf8 
    database: projectname_test 
    username: root 
    password: 

Ive cũng đã cố gắng

db:test:purge 

db:test:reset 

và tôi biết rằng nó được sử dụng db thử nghiệm của tôi, bởi vì tôi kiểm tra mySQLWorkbench, và nó chèn dữ liệu vào các bảng ... nhưng không xóa dữ liệu khi hoàn thành (tôi phải xóa nó theo cách thủ công). Khi các bảng trống, các trường hợp thử nghiệm vượt qua

+0

Bạn có chắc chắn bạn đang sử dụng InnoDB và MyISAM không. –

Trả lời

0

Hãy thử về điều này, nhưng bạn đã thử thả và tạo lại cơ sở dữ liệu khi đang di chuyển chưa?

+0

không hoạt động = (tôi đã làm tương tự như trên ... ngoại trừ với 4 dòng cào ... với db: test: drop và db: test: tạo – DerNalia

+0

đang chạy Chuẩn bị trong các thiết bị đầu cuối ... vì vậy tôi đoán có gì đó sai với mã trong các tính năng/hỗ trợ/env.rb – DerNalia

+0

Được rồi, có thể mã hóa (giải quyết vấn đề) trong các tính năng/hỗ trợ/env.rb có thể là một giải pháp – Nik

1

Các trường hợp trong Dưa chuột, giống như các thử nghiệm trong RSpec, được chạy trong các khối giao dịch và được khôi phục sau khi hoàn thành kịch bản. Bất kỳ dữ liệu nào trong cơ sở dữ liệu không nên có ở đó có lẽ còn sót lại từ một thứ khác. Hãy thử dọn dẹp cơ sở dữ liệu của bạn.

+0

như thế nào? Cucumber :: Rails :: World. use_transactional_fixtures = true nằm trong env.rb ... vì vậy các giao dịch được thực hiện ... nhưng chúng không có. – DerNalia

4

Bạn nên sử dụng

begin 
    require 'database_cleaner' 
    require 'database_cleaner/cucumber' 
    DatabaseCleaner.strategy = :truncation 

rescue NameError 
    raise "You need to add database_cleaner to your Gemfile (in the :test group) if you wish to use it." 

end 

Before do 
    DatabaseCleaner.start 
end 

After do |scenario| 
    DatabaseCleaner.clean 
end 
Các vấn đề liên quan