Mac环境
Rails 5.1.4
ruby 2.4.1
bootstrap v3.3.7
本人是大叔级别,年轻的时候是用asp来给别人做点小项目,但是半路转行做货车司机,到目前还是专职的货车司机。
最近比较闲,把空闲的macbook拿出来学习新的语言;经过多处了解,选择了当地没有一个招聘职位的语言来学,你们说我是不是闲的蛋疼?
在网上找了很多资源来看,但是觉得没有系统的学习是没啥用处,后来去叉宝找了一下纸版的书,然后就找到了这本,如下图:
此书是刚刚出的,我第一时间就买了,叉宝上写着大大的“正版”,然后我就买了。
接下来就是认真的读书了,读着读着,书上居然写着有电子档,我上网打开一看,额,我不想说了。
额,废话不多说了,直接入正题。整本书我刚刚用了一个月读完,并且把书里的项目都做下来了,在做书上的项目过程中,发现很多FILL_IN,刚开始还不明白,撸了很久才发现这个FILL_IN是要我改成相应的code,书上并没有答案列出来,当然,我可能不知道在哪里,书上指一个网址有答案,但我进去后一脸蒙逼的点了X,算了,靠自己来想答案。
以下答案基本是我自己想出来的,并不是标准答案,大家如果发现有问题可以评论中提出,我可以做个test,我直接把部份代码贴出来,【XXOO】的就是FILL_IN处,我直接写成答案了,你们使用时记得删除掉【】这个东东。
书本94页(第3章 代码清单 3.42:测试根路由 GREEN)
test "should get root" do
get 【root_url】
assert_response 【:success】
end
书本112页(第4章 代码清单 4.10:测试回文的方法)
>> def palindrome_tester(s)
>> if 【s == s.reverse】
>> puts "It's a palindrome!"
>> else
>> puts "It's not a palindrome."
>> end
>> end
书本166页(第5章 代码清单 5.37:直接测试 full_title 辅助方法)
class ApplicationHelperTest < ActionView::TestCase
test "full title helper" do
assert_equal full_title, 【"Ruby on Rails"】
assert_equal full_title("Help"), 【"Help | Ruby on Rails"】
end
书本248页(第7章 闪现消息测试的模板)
follow_redirect!
assert_template 'users/show'
assert_not flash.【empty?】
书本309页(第9章 代码清单 9.28:改进后的“记住我”复选框测试模板)(我整个项目做完后再来加这行code出现bug,我在网上找到的【答案】,供大家参考。)
test "login with remembering" do
log_in_as(@user, remember_me: '1')
assert_equal 【cookies['remember_token']】, assigns(:user).【remember_token】
end
书本354页(第10章 代码清单 10.56:测试禁止修改 admin 属性)
test "should not allow the admin attribute to be edited via the web" do
log_in_as(@other_user)
assert_not @other_user.admin?
patch user_path(@other_user), params: {
user: { password: 【@other_user.password】,
password_confirmation: 【@other_user.password】,
admin: 【true】} }
assert_not 【@other_user】.admin?
end
书本390页(第11章 代码清单 11.39:使用 update_columns 的代码模板)
# 激活账户
def activate
update_columns(activated: 【true】, activated_at: 【Time.zone.now】)
end
书本391页(第11章 代码清单 11.39:使用 update_columns 的代码模板)
def index
@users = User.where(activated: 【true】).paginate(page: params[:page])
end
def show
@user = User.find(params[:id])
redirect_to root_url and return unless 【@user.activated】
end
书本419页(第12章 代码清单 12.20:使用 update_columns 的代码模板)
def create_reset_digest
self.reset_token = User.new_token
update_columns(reset_digest: User.digest【(reset_token)】, reset_sent_at: 【Time.zone.now】)
end
书本420页(第12章 代码清单 12.21:测试密码重设请求超时)
# 密码重设请求超时
test "expired token" do
get new_password_reset_path
post password_resets_path, params: { password_reset: { email: @user.email } }
@user = assigns(:user)
@user.update_attribute(:reset_sent_at, 2.hours.ago)
patch password_reset_path(@user.reset_token),
params: { email: @user.email,
user: { password: "foobar",
password_confirmation: "foobar" } }
assert_response :redirect
follow_redirect!
# 进行全文匹配,任何正则表达式元字符都不会被转义
assert_match /【Password reset has expired.】/i, response.body
end
书本468页(第13章 代码清单 13.57:侧边栏中微博数量的测试模板)(第一个FILL_IN {34} 取决于你当前有多少条微博就写多少条)
test "micropost sidebar count" do
log_in_as(@user)
get root_path
assert_match "【34 microposts】", response.body
# 这个用户没有发布微博
other_user = users(:malory)
log_in_as(other_user)
get root_path
assert_match "0 microposts", response.body
other_user.microposts.create!(content: "A micropost")
get root_path
assert_match "【1 micropost】", response.body
end
书本473页(第13章 代码清单 13.63:测试图像上传功能的模板)(这里的第三个FILL_IN不是我想出来的,我在【这里】找到答案)
test "micropost interface" do
log_in_as(@user)
get root_path
assert_select 'div.pagination'
assert_select 'input[type=【file】]'
# 无效提交
assert_no_difference 'Micropost.count' do
post microposts_path, params: { micropost: { content: "" } }
end
assert_select 'div#error_explanation'
# 有效提交
content = "This micropost really ties the room together"
picture = fixture_file_upload('test/fixtures/timg.jpeg', 'image/jpeg')
assert_difference 'Micropost.count', 1 do
post microposts_path, params: { micropost: { content: content, picture: 【picture】 } }
end
assert 【assigns(:micropost)】.picture?
follow_redirect!
assert_match content, response.body
# 删除一篇微博
assert_select 'a', text: 'delete'
first_micropost = @user.microposts.paginate(page: 1).first
assert_difference 'Micropost.count', -1 do
delete micropost_path(first_micropost)
end
# 访问另一个用户的资料页面(没有删除链接)
get user_path(users(:archer))
assert_select 'a', text: 'delete', count: 0
end
书本529页(第14章 代码清单 14.49:测试动态流的 HTML)
test "feed on Home page" do
get root_path
@user.feed.paginate(page: 1).each do |micropost|
assert_match CGI.escapeHTML(【"\n"】), 【response.body】
end
完!