在gemfile 中 加入 如下文件
group :development, :test do
gem "rspec-rails", "~> 2.14.0" #封装 RSpec 的程序,还包含了一些专为 Rails 提供的功能
gem "factory_girl_rails", "~> 4.2.1" #预构件
end
group :development do
gem 'guard-rspec', '~> 3.0.2' #
gem 'guard-spork', '~> 1.5.1'
gem 'spork-rails', github: 'sporkrb/spork-rails'
gem 'rb-fsevent', '~> 0.9.3'
end
group :test do
gem 'capybara', '2.1.0' #便于模拟用户和程序的交互操作
gem "faker", "~> 1.1.2" #为预构件生成名字、Email 地址以及其他的示例数据
gem "database_cleaner", "~> 1.0.1"#清理“测试数据库”,确保 RSpec 中的测试用例运行于一块净土之上
gem "launchy", "~> 2.3.0" #这个 gem 的功能只有一个,但做的很好,如果需要,它会打开系统的默认浏览器,显示应用程序当前渲染的页面。调试测试时特别有用
gem "selenium-webdriver", "~> 2.33.0" #结合 Capybara 测试基于 JavaScript 的交互操作
end
在把测试的数据库弄起来
rake db:create:all
rake db:test:clone
设置rspec
bundle exec rails g rspec:install
把 Capybara DSL 加入 RSpec 帮助文件
spec/spec_helper.rb
config.include Capybara::DSL
在设置生成器,在config/ application.rb 中加入如下代码
config.generators do |g|
g.test_framework :rspec,
fixtures: true,
view_specs: false,
helper_specs: false,
routing_specs: false,
controller_specs: true,
request_specs: false
g.fixture_replacement :factory_girl, dir: "spec/factories"
end
- fixtures: true 的意思是为各模型生成测试固件(使用 Factory Girl 创建的预构件,而不是默认的固件)
- view_specs: false 的意思是不生成“视图测试”。本书不会介绍“视图测试”,测试界面元素我使用的是功能测试
- helper_specs: false 的意思是生成控制器时不生成对应的帮助方法测试文件。如果你觉得有必要,可以把这个选项设为 true,对帮助方法进行测试
- routing_specs: false 的意思是不生成针对 config/routes.rb 的测试文件。如果应用程序很简单,比如本书用到的程序,可以放心的跳过路由测试。不过,如果是大型程序,路由很复杂,最好还是测试一下路由
- g.fixture_replacement :factory_girl 告知 Rails 使用预构件代替固件,把预构件存放在 spec/factories 文件夹中
设置 guard
bundle exec guard init rspec
设置spork
bundle exec spork --bootstrap
让spork and guard 一同协作
bundle exec guard init spork
database_clean
在gemfile test中加入
gem "database_cleaner", "~> 1.0.1"
在rspec_helper中加入
config.before :each do
DatabaseCleaner.strategy = :truncation
DatabaseCleaner.start
load Rails.root + "db/seeds.rb"
end
config.after(:each) do
DatabaseCleaner.clean
end
然后如果要测试js的话就要用到selenium
在gemfile中加入
gem 'capybara-webkit'
gem "selenium-webdriver", "~> 2.34.0"(一定要在2.34以上的版本)
然后修改spec_helper 文件
Capybara.javascript_driver = :webkit
config.before :each do
DatabaseCleaner.strategy = :truncation
DatabaseCleaner.start
Capybara.current_driver = :selenium
load Rails.root + "db/seeds.rb"
end
config.after(:each) do
DatabaseCleaner.clean
Capybara.use_default_driver
end
网友评论