Rspec + Capybara:控制器丢失,无论如何都要通过集成规范

时间:2014-06-06 08:33:34

标签: ruby-on-rails rspec tdd capybara

我开始使用全新的rails应用程序(使用rspec-rails 2.99& capybara 2.3.0),并编写了一个简单的简单集成规范来开始使用TDD:

# spec/integration/visit_home_page_spec.rb

require 'spec_helper'

feature "view the home page" do
  scenario "user visits home page" do
    visit root_path
    expect(page).to have_content 'Password'
  end
end

正如预期的那样,由于root_path未定义,测试失败了 - 所以我继续前进:

# config/routes.rb

root 'users#new'

这就是问题:由于用户控件未定义,规格失败,反而,它是绿色的。似乎rspec正在评估错误页面本身,并且由于该页面恰好包含单词“password”,因此规范通过。

为了确保发生了什么,我已将规范修改为:

# spec/integration/visit_home_page_spec.rb

...
  expect(page).to have_content 'theresnowaythisisinthepage'
...

现在测试失败,但,因为它正在拾取未定义的UsersController - 只是因为内容不在错误页面中。

我已经用这种方法开了很多应用程序,这是我第一次看到rspec误认为有效的错误页面 - 我打破了什么?

我怀疑当我找到答案时,我的前额会有一个大手形标记。

-

这是我的 Gemfile

source 'https://rubygems.org'

gem 'rails', '~> 4.1.1'
gem 'mysql2', '~> 0.3.16'
gem 'sass-rails', '~> 4.0.2'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.0.0'
gem 'jquery-rails'
gem 'active_model_serializers', '~> 0.8.1'
gem 'slim-rails', '~> 2.1.4'
gem 'bootstrap-sass', '~> 3.1.1.1'
gem 'bootstrap-generators', '~> 3.1.1.3'

group :test, :development do
  gem 'rspec-rails', '~> 2.99'
  gem 'capybara', '~> 2.3.0'
end

group :development do
  gem "better_errors"
  gem "binding_of_caller" # required by better-errors
  gem "launchy"
end

group :doc do
  gem 'sdoc', require: false
end

这是 spec_helper

require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f }
ActiveRecord::Migration.maintain_test_schema!

RSpec.configure do |config|

  config.fixture_path = "#{::Rails.root}/spec/fixtures"
  config.use_transactional_fixtures = true
  config.infer_base_class_for_anonymous_controllers = false
  config.order = "random"
  config.infer_spec_type_from_file_location!

  config.include Capybara::DSL
end

0 个答案:

没有答案