2010-05-11 126 views
3

我試圖在測試環境中使用ruby腳本加載rails。我試着google搜索了一下,發現這個建議:在測試環境中啓動rails

require "../../config/environment" 
ENV['RAILS_ENV'] = ARGV.first || ENV['RAILS_ENV'] || 'test' 

這似乎是正常的加載了我的環境,但仍在使用我開發數據庫。難道我做錯了什麼?

這是我的database.yml文件......但是我不認爲這是問題

development: 
    adapter: mysql 
    encoding: utf8 
    reconnect: false 
    database: BrianSite_development 
    pool: 5 
    username: root 
    password: dev 
    host: localhost 

# Warning: The database defined as "test" will be erased and 
# re-generated from your development database when you run "rake". 
# Do not set this db to the same as development or production. 
test: 
    adapter: mysql 
    encoding: utf8 
    reconnect: false 
    database: BrianSite_test 
    pool: 5 
    username: root 
    password: dev 
    host: localhost 

production: 
    adapter: mysql 
    encoding: utf8 
    reconnect: false 
    database: BrianSite_production 
    pool: 5 
    username: root 
    password: dev 
    host: localhost 

我不能使用

ruby script/server -e test 

,因爲我試圖運行我加載導軌後的紅寶石代碼。更具體地說,我想要做的是:運行一個.sql數據庫腳本,加載軌道,然後運行自動化測試。一切似乎都工作正常,但無論出於什麼原因,rails似乎在開發環境而不是測試環境中加載。

下面是代碼,我試圖運行的縮短版:

system "execute mysql script here" 

require "../../config/environment" 
ENV['RAILS_ENV'] = ARGV.first || ENV['RAILS_ENV'] || 'test' 

describe Blog do 
    it "should be initialized successfully" do 
    blog = Blog.new 
    end 
end 

我不需要啓動服務器,我只需要載入我的Rails代碼庫(模型,控制器等..),所以我可以對我的代碼運行測試。

感謝您的任何幫助。

更新:

我現在正在加載我的導軌環境。現在我試圖在我的rake任務中運行我的測試文件。這裏是我的代碼:

require"spec" 
require "spec/rake/spectask" 
RAILS_ENV = 'test' 

namespace :run_all_tests do 
    desc "Run all of your tests" 

    puts "Reseting test database..." 
    system "mysql --user=root --password=dev < C:\\Brian\\Work\\Personal\\BrianSite\\database\\BrianSite_test_CreateScript.sql" 
    puts "Filling database tables with test data..." 
    system "mysql --user=root --password=dev < C:\\Brian\\Work\\Personal\\BrianSite\\database\\Fill_Test_Tables.sql" 

    puts "Starting rails test environment..." 
    task :run => :environment do 
    puts "RAILS_ENV is #{RAILS_ENV}" 
    require "spec/models/blog_spec.rb" 
    end 
end 

我認爲需要「規格/型號/ blog_spec.rb」文件將做到這一點,但它似乎並沒有運行測試...

感謝幫助到目前爲止。

+0

顯示你的配置/數據庫。yml文件 – fl00r 2010-05-11 23:21:33

+0

好吧,我不明白確切的問題。您可以嘗試指定ENV [「RAILS_ENV」] =「test」require File.expand_path('../../ config/environment',__FILE __)'明確 – fl00r 2010-05-12 00:29:39

回答

6

你知道你可以從Rake運行你的單元,功能和集成測試,對嗎?查看rake -T test的輸出以查看如何。

如果您需要更多自定義的東西,您可以創建自己的Rake任務。把這樣的事情在一個文件中lib/tasks

namespace :custom_tests do 
    desc "Run my custom tests" 
    task :run => :environment do 
    puts "RAILS_ENV is #{RAILS_ENV}" 
    system "execute mysql script here" 
    # Do whatever you need to do 
    end 
end 

=> :environment加載當前環境爲您服務。然後,您可以在測試環境中這樣運行了你的任務:RAILS_ENV=test rake custom_tests:run

+0

非常感謝!我對ruby和rails非常陌生,並不知道rake的功能。現在我只是試圖在這個rake任務中運行我的測試文件。我用我現在的代碼更新了我的問題。再次感謝您的幫助。 – 2010-05-12 20:47:45

+0

哦!如果你使用的是Rspec,你應該查看rspec-rails插件(http://wiki.github.com/dchelimsky/rspec/rails)。它會給你很多與Rails相關的幫助方法。此外,它會給你一個Rake任務來運行你的所有規格(rake spec)。 您也可以查看關於Rspec的Peepcode屏幕錄像(http://peepcode.com/products/rspec-basics)。我發現他們對我的入門非常有幫助。 乾杯! – agregoire 2010-05-13 01:38:33

+0

我已經看過rspec-rails插件,但它需要你使用遷移,我不是。這就是爲什麼我在運行測試之前一直在運行mysql腳本等問題。 – 2010-05-13 13:19:13

9

開始測試環境中,你應該-e PARAM運行腳本/服務器:

ruby script/server -e test 

,並在你的config/database.yml中必須測試ENV數據庫defenition,即:

test: 
    adapter: sqlite3 
    database: db/test.sqlite3 
    pool: 5 
    timeout: 5000 
27

此命令爲我做。我能夠使用它的數據庫加載環境測試。

$rails s -e test