2013-11-25 51 views
4

我正在使用rspec,capybara和launchy來測試我的web應用程序。在水豚/ rspec規格期間不加載資產

這裏是我的規格:

require 'spec_helper' 

describe "Routes" do 
    describe "GET requests" do 
     it "GET /root_path" do 
      visit root_path 
     page.should have_content("All of our statuses") 
     click_link "Post a New Status" 
     page.should have_content("New status") 
     fill_in "status_name", with: "Jimmy balooney" 
     fill_in "status_content", with: "Oh my god I am going insaaaaaaaaane!!!" 
     click_button "Create Status" 
     page.should have_content("Status was successfully created.") 
     click_link "Statuses" 
     page.should have_content("All of our statuses") 
     page.should have_content("Jimmy balooney") 
     page.should have_content("Oh my god I am going insaaaaaaaaane!!! ") 
     save_and_open_page 
     end 
    end 
end 

我.rspec

--color 
--order default 

和我spec_helper.rb:

# This file is copied to spec/ when you run 'rails generate rspec:install' 
ENV["RAILS_ENV"] ||= 'test' 
require File.expand_path("../../config/environment", __FILE__) 
require 'rspec/rails' 
require 'rspec/autorun' 
require 'capybara/rspec' 

# Requires supporting ruby files with custom matchers and macros, etc, 
# in spec/support/ and its subdirectories. 
Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f } 

# Checks for pending migrations before tests are run. 
# If you are not using ActiveRecord, you can remove this line. 
ActiveRecord::Migration.check_pending! if defined?(ActiveRecord::Migration) 

RSpec.configure do |config| 
    # ## Mock Framework 
    # 
    # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line: 
    # 
    # config.mock_with :mocha 
    # config.mock_with :flexmock 
    # config.mock_with :rr 
    config.before(:suite) do 
    DatabaseCleaner.strategy = :transaction 
    DatabaseCleaner.clean_with(:truncation) 
    end 

    config.before(:each) do 
    DatabaseCleaner.start 
    DatabaseCleaner.clean 
    end 

    config.after(:each) do 
    DatabaseCleaner.clean 
    end 

    # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures 
    config.fixture_path = "#{::Rails.root}/spec/fixtures" 

    # If you're not using ActiveRecord, or you'd prefer not to run each of your 
    # examples within a transaction, remove the following line or assign false 
    # instead of true. 
    config.use_transactional_fixtures = true 

    # If true, the base class of anonymous controllers will be inferred 
    # automatically. This will be the default behavior in future versions of 
    # rspec-rails. 
    config.infer_base_class_for_anonymous_controllers = false 

    # Run specs in random order to surface order dependencies. If you find an 
    # order dependency and want to debug it, you can fix the order by providing 
    # the seed, which is printed after each run. 
    #  --seed 1234 
    config.order = "random" 
end 

如果你回頭看看我的天賦,你會看到一個使用水豚瀏覽我的應用程序的rspec規範,並通過調用launchy gem的save_and_open_page方法打開這個最後的pa ge在瀏覽器中供人看。然而,在最後一頁,沒有顯示javascript或css,只是純粹的HTML。

有沒有人有任何想法,爲什麼會這樣?我想測試JavaScript,如果所有資源都加載了,我會更喜歡它。

回答

9

config.before(:suite) do

地址:

%x[bundle exec rake assets:precompile] 

預編譯Rails的資產,然後在你的test.rb環境文件中加入:

config.action_controller.asset_host = "file://#{::Rails.root}/public" 
config.assets.prefix = 'assets_test' 

指向預編譯的資產的位置。現在您可以在運行Capybara時使用資產。 注意:確保您是否使用git忽略該新文件夾。

+0

這樣會令每一個人測試慢? –

+0

如果不使用RSpec,你知道該怎麼做嗎? – sscirrus

0

您可以直接添加到test.rb

config.assets.compile = true