这个项目是
https://github.com/chucai/Ruby-on-Rails-Tutorial-by-Michael-Hartl--v3.2-
有比较网站的Rails测试代码,项目比较小,只有三张表,但是代码结构简单,思路清晰,有非常多的值得借鉴和学习的地方。
所有做了这个研究笔记。
1. 实现的功能有:
• 集成了cucumber 和 rspec测试
• 自己定义的用户认证[没有使用devise]
• 简单的微博类型的跟随
• 简单的micropost提交
• 使用了bootstrap 框架
这个小系统所具备的功能有:
1, 登录与注册
2, 跟随某人
3, 个人首页
4, 写微博
2. 如何在where中使用占用符?
private
# Returns an SQL condition for users followed by the given user.
# We include the user's own id as well.
def self.followed_by(user)
followed_user_ids = %( SELECT followed_id FROM relationships
WHERE follower_id = :user_id)
where( "user_id IN (#{followed_user_ids}) OR user_id = :user_id",
{ user_id: user })
end
rspec中的subject , it 使用实例
let( :follower) { FactoryGirl.create( :user) }
let( :followed) { FactoryGirl.create( :user) }
let( :relationship) do
follower.relationships.build(followed_id: followed.id)
end
subject { relationship }
it { should be_valid }
describe "follower methods" do
before { relationship.save }
it { should respond_to( :follower) }
it { should respond_to( :followed) }
its( :follower) { should == follower }
its( :followed) { should == followed }
end
subject 是it 后默认的变量
its( :symbol) 是从 let 中取值
css选择器 选择页面中的元素
it { should have_selector( 'h1', text: heading) }
3. rspec如何就行ajax测试
it "should decrement the Relationship count" do
expect do
xhr :delete, :destroy, id: relationship.id
end.should change( Relationship, :count).by(- 1)
end
4. 如何写cucumber的测试用例,如下的代码可以参考
Feature: Signing in
Scenario: Unsuccessful signin
Given a user visits the signin page
When he submits invalid signin information
Then he should see an error message
Scenario: Successful signin
Given a user visits the signin page
And the user has an account
And the user submits valid signin information
Then he should see his profile page
And he should see a signout link
定义了两个场景, 注册成功和注册失败, 如下是step文件
Given /^a user visits the signin page$/ do
visit signin_path
end
When /^he submits invalid signin information$/ do
click_button "Sign in"
end
Then /^he should see an error message$/ do
page.should have_selector( 'div.alert.alert-error')
end
Given /^the user has an account$/ do
@user = User.create(name: "Example User", email: "user@example.com",
password: "foobar", password_confirmation: "foobar")
end
When /^the user submits valid signin information$/ do
visit signin_path
fill_in "Email", with: @user.email
fill_in "Password", with: @user.password
click_button "Sign in"
end
Then /^he should see his profile page$/ do
page.should have_selector( 'title', text: @user.name)
end
Then /^he should see a signout link$/ do
page.should have_link( 'Sign out', href: signout_path)
end
https://github.com/chucai/Ruby-on-Rails-Tutorial-by-Michael-Hartl--v3.2-
有比较网站的Rails测试代码,项目比较小,只有三张表,但是代码结构简单,思路清晰,有非常多的值得借鉴和学习的地方。
所有做了这个研究笔记。
1. 实现的功能有:
• 集成了cucumber 和 rspec测试
• 自己定义的用户认证[没有使用devise]
• 简单的微博类型的跟随
• 简单的micropost提交
• 使用了bootstrap 框架
这个小系统所具备的功能有:
1, 登录与注册
2, 跟随某人
3, 个人首页
4, 写微博
2. 如何在where中使用占用符?
private
# Returns an SQL condition for users followed by the given user.
# We include the user's own id as well.
def self.followed_by(user)
followed_user_ids = %( SELECT followed_id FROM relationships
WHERE follower_id = :user_id)
where( "user_id IN (#{followed_user_ids}) OR user_id = :user_id",
{ user_id: user })
end
rspec中的subject , it 使用实例
let( :follower) { FactoryGirl.create( :user) }
let( :followed) { FactoryGirl.create( :user) }
let( :relationship) do
follower.relationships.build(followed_id: followed.id)
end
subject { relationship }
it { should be_valid }
describe "follower methods" do
before { relationship.save }
it { should respond_to( :follower) }
it { should respond_to( :followed) }
its( :follower) { should == follower }
its( :followed) { should == followed }
end
subject 是it 后默认的变量
its( :symbol) 是从 let 中取值
css选择器 选择页面中的元素
it { should have_selector( 'h1', text: heading) }
3. rspec如何就行ajax测试
it "should decrement the Relationship count" do
expect do
xhr :delete, :destroy, id: relationship.id
end.should change( Relationship, :count).by(- 1)
end
4. 如何写cucumber的测试用例,如下的代码可以参考
Feature: Signing in
Scenario: Unsuccessful signin
Given a user visits the signin page
When he submits invalid signin information
Then he should see an error message
Scenario: Successful signin
Given a user visits the signin page
And the user has an account
And the user submits valid signin information
Then he should see his profile page
And he should see a signout link
定义了两个场景, 注册成功和注册失败, 如下是step文件
Given /^a user visits the signin page$/ do
visit signin_path
end
When /^he submits invalid signin information$/ do
click_button "Sign in"
end
Then /^he should see an error message$/ do
page.should have_selector( 'div.alert.alert-error')
end
Given /^the user has an account$/ do
@user = User.create(name: "Example User", email: "user@example.com",
password: "foobar", password_confirmation: "foobar")
end
When /^the user submits valid signin information$/ do
visit signin_path
fill_in "Email", with: @user.email
fill_in "Password", with: @user.password
click_button "Sign in"
end
Then /^he should see his profile page$/ do
page.should have_selector( 'title', text: @user.name)
end
Then /^he should see a signout link$/ do
page.should have_link( 'Sign out', href: signout_path)
end