我爱编程

rspec + guard + spork +database_

2014-01-08  本文已影响187人  杜小龙

在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
  1. fixtures: true 的意思是为各模型生成测试固件(使用 Factory Girl 创建的预构件,而不是默认的固件)
  2. view_specs: false 的意思是不生成“视图测试”。本书不会介绍“视图测试”,测试界面元素我使用的是功能测试
  3. helper_specs: false 的意思是生成控制器时不生成对应的帮助方法测试文件。如果你觉得有必要,可以把这个选项设为 true,对帮助方法进行测试
  4. routing_specs: false 的意思是不生成针对 config/routes.rb 的测试文件。如果应用程序很简单,比如本书用到的程序,可以放心的跳过路由测试。不过,如果是大型程序,路由很复杂,最好还是测试一下路由
  5. 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
上一篇下一篇

猜你喜欢

热点阅读