【发布时间】:2013-10-11 00:41:34
【问题描述】:
您好,我正在尝试通过 capybara 填写一些数据来测试表格。我的测试运行没有任何错误,但我在测试或开发数据库中都看不到该数据。我的测试在“规范/功能/文件名”中。我的测试类似于
require 'spec_helper'
feature "New Application" do
scenario 'has 200 status code if logged in' do
visit '/applications/new?id=.........'
fill_in 'application[applicants_attributes][0][first_name]', :with => 'Rose'
fill_in 'application[applicants_attributes][0][first_name]', :with => 'Farmer'
click_link 'sbmt'
current_path.should == '/applications/new'
page.status_code.should be 200
end
end
需要帮助!!!! 我的 spec_helper 类似于
require 'simplecov'
SimpleCov.start do
add_filter '/spec/'
add_filter '/config/'
add_filter '/lib/'
add_filter '/vendor/'
end
# 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'
# Add this to load Capybara integration:
require 'capybara/rspec'
require 'capybara/rails'
require 'rspec/autorun'
require 'crack'
Capybara.register_driver :rack_test do |app|
Capybara::RackTest::Driver.new(app, :headers => { 'User-Agent' => 'Capybara' })
end
# 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 }
RSpec.configure do |config|
config.include Capybara::DSL, type: :feature
RSpec.configure do |config|
config.use_transactional_fixtures = false
#config.use_transactional_fixtures = false
config.before :each do
DatabaseCleaner.strategy = :truncation
DatabaseCleaner.start
end
config.after do
DatabaseCleaner.clean
end
end
# 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
# Remove this line if you're not using ActiveRecord or ActiveRecord 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.
# 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 输出是
Failures:
1) New Application has 200 status code if logged in
Failure/Error: Application.where("first_name = 'Rose' AND last_name = 'Farmer'").count.should == 1
expected: 1
got: 0 (using ==)
# ./spec/features/applications_controller_spec.rb:23:in `block (2 levels) in <top (required)>'
Finished in 0.7381 seconds
1 example, 1 failure
Failed examples:
rspec ./spec/features/applications_controller_spec.rb:4 # New Application has 200 status code if logged in
Randomized with seed 49732
Coverage report generated for Cucumber Features to /home/nomi/homesbyhaven/coverage. 241 / 616 LOC (39.12%) covered.
问题是我无法将数据保存到数据库。如果我从测试中删除对应用程序表中数据的检查。它通过了。但我如何验证它是否真的通过了。我的意思是说没有问题。
谢谢
【问题讨论】:
-
您是否启用了 transactional_fixtures?如果是这样,您的所有事务都将在测试结束时回滚
-
我已尝试禁用它们,但我得到了“#<:core::configuration:0x967f288> (NoMethodError) 的未定义方法 `use_transactional_fixtures='”
-
发布您的 rspec 输出!!!我们不知道您的问题的症状是什么。您看不到数据库中的数据还是只是您的测试失败了?
-
@Kosmonaut 我已经更新了 rspec 输出。如果我在测试中检查了数据库中的数据,问题是测试没有通过。
-
@Kosmonaut 如果我删除了检查,那么测试就通过了,但是我怎么能确定他们没有错
标签: ruby-on-rails rspec capybara