在sinatra中使用RSpec+Capybara

###Befor work

1)在Gemfile中添加如下代码

1
2
3
4
group :test do
gem 'rspec'
gem 'capybara'
end

2)在Rakefile中添加如下代码

1
2
3
4
5
6
7
require 'rspec/core/rake_task'
desc "Run specs"
task :spec do
RSpec::Core::RakeTask.new(:spec) do |t|
t.pattern = './spec/**/*_spec.rb'
end
end

3)在/ROOT/spec文件夹下的spec_helper.rb文件中添加如下代码

1
2
3
require 'rspec'
require 'capybara/rspec'
require 'rack/test'

做完以上步骤后就可以进行测试代码了

###Test

1)测试功能

在/ROOT/spec文件夹中添加lib_helper.rb文件,里面中添加如下代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
require File.dirname(__FILE__) + '/spec_helper'
$LOAD_PATH.unshift(File.dirname(__FILE__) + '/../lib')
require 'lib'

describe Lib do
before(:each) do
@lib = Lib.new
end

it "test name" do
@lib.name = "test name"
@lib.name.should == 'test name'
end
end

2)测试页面动作

在/ROOT/spec文件夹中添加root_helper.rb文件,里面中添加如下代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
require File.dirname(__FILE__) + '/spec_helper'
# 加载sinatra app
require File.join(File.dirname(__FILE__), '..', 'app.rb')

# 采用模块化的方式
Capybara.app = App.new

# 采用传统的方式
Capybara.app = Sinatra::Application.new

feature Root do
context 'login' do
it 'success' do
visit '/login'
within("#login") do
fill_in 'name', :with => 'admin'
fill_in 'password', :with => 'password'
end
click_button 'Login'
current_path.should == '/'
page.should have_content 'Login success'
end
end
end

3)在命令行中运行rake spec

####Read more