我开始使用全新的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