Rails简单的项目研究笔记一

本文详细介绍了如何在小型Ruby on Rails应用中集成Cucumber和RSpec进行测试,包括用户认证、微博功能、跟随功能等。通过具体代码示例展示了如何使用SQL条件、RSpec中的subject和it方法进行测试,以及如何进行AJAX测试和Cucumber测试用例编写。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个项目是
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

#ReturnsanSQLconditionforusersfollowedbythegivenuser.
#Weincludetheuser'sownidaswell.
defself.followed_by(user)
followed_user_ids=%(SELECTfollowed_idFROMrelationships
WHEREfollower_id=:user_id)
where("user_idIN(#{followed_user_ids})ORuser_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{shouldbe_valid}

describe"followermethods"do
before{relationship.save}

it{shouldrespond_to(:follower)}
it{shouldrespond_to(:followed)}
its(:follower){should==follower}
its(:followed){should==followed}
end

subject是it后默认的变量
its(:symbol)是从let中取值

css选择器选择页面中的元素
it{shouldhave_selector('h1',text:heading)}


3.rspec如何就行ajax测试
it"shoulddecrementtheRelationshipcount"do
expectdo
xhr:delete,:destroy,id:relationship.id
end.shouldchange(Relationship,:count).by(-1)
end


4.如何写cucumber的测试用例,如下的代码可以参考

Feature:Signingin

Scenario:Unsuccessfulsignin
Givenauservisitsthesigninpage
Whenhesubmitsinvalidsignininformation
Thenheshouldseeanerrormessage

Scenario:Successfulsignin
Givenauservisitsthesigninpage
Andtheuserhasanaccount
Andtheusersubmitsvalidsignininformation
Thenheshouldseehisprofilepage
Andheshouldseeasignoutlink

定义了两个场景,注册成功和注册失败,如下是step文件
Given/^auservisitsthesigninpage$/do
visitsignin_path
end

When/^hesubmitsinvalidsignininformation$/do
click_button"Signin"
end

Then/^heshouldseeanerrormessage$/do
page.shouldhave_selector('div.alert.alert-error')
end

Given/^theuserhasanaccount$/do
@user=User.create(name:"ExampleUser",email:"user@example.com",
password:"foobar",password_confirmation:"foobar")
end

When/^theusersubmitsvalidsignininformation$/do
visitsignin_path
fill_in"Email",with:@user.email
fill_in"Password",with:@user.password
click_button"Signin"
end

Then/^heshouldseehisprofilepage$/do
page.shouldhave_selector('title',text:@user.name)
end

Then/^heshouldseeasignoutlink$/do
page.shouldhave_link('Signout',href:signout_path)
end


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值