位置:../features/user_login.feature
Scenario: 用户填写无效数据并注册
Given 我来到注册页面
And 我在输入框<user_name>中输入<invalidUsername>
And 我在输入框<user_email>中输入<
[email protected]>
And 我在输入框<user_password_confirmation>中输入<1234567810>
And 我在输入框<user_password>中输入<123456789>
And 我在输入框<user_phone_number>中输入<12345678913>
And 我上传文件<user_avatar>中选择<cat.jpg>
When 我按下<Create User>按钮
Then 我应该在错误提示信息<li>看到<Password 两次密码不正确>
可是电脑无法识别这些内容那么我们还需要写个解释文件如下
位置:../features/step_definitions/user_steps.rb
When /^我来到(.+)$/ do |page_name|
visit path_to(page_name)
end
When /^我在输入框<(.+)>中输入<(.*)>$/ do |field, value|
fill_in(field, :with => value)
end
When /^我按下<(.+)>按钮$/ do |button|
click_button(button)
end
When /^我上传文件<(.+)>中选择<(.*)>$/ do |field,filename|
attach_file(field, File.join(Rails.root, "public/features", "assets", filename))
end
Then /^我应该在错误提示信息<(.+)>看到<(.*)>$/ do |field,msg|
page.find(field).should have_content msg
end
但是电脑太傻不知道去哪个页面测试这些,所以我们还要写个地址文件
位置:../features/support/paths.rb
def path_to(page_name)
case page_name
when /首页/
"http://127.0.0.1:3000/users/index"
when /注册页面/
"http://127.0.0.1:3000/users/new"
# Add more page name => path mappings here
else
raise "Can't find mapping from \"#{page_name}\" to a path."
end
end
这样需求分析完成了,那么代码人员也就该开发这个功能了,这是代码人员与测试人员进行探讨边界条件,并写出测试描述,满足上述需求模型为了满足这样的需求,我们需要写个model测试
describe User do
describe"当任意属性为空时,user都不应被创建"do
it "当name值为NIL是,user不应该被创建"do
user = FactoryGirl.build(:user_name_nil)
assert user.invalid?
end
it "当password为空时,user不应该被创建"do
user = FactoryGirl.build(:user_password_nil)
assert user.invalid?
end
it "当email为空时,user不应该被创建"do
user = FactoryGirl.build(:user_email_nil)
assert user.invalid?
end
it "当phone_number为NIL时,user不应该被创建"do
user = FactoryGirl.build(:user_phone_number_nil)
assert user.invalid?
end
end
describe "当检察不正常的时候,user不应该被创建" do
it "当password_confirmation与password验证不通过时,user不该被创建"do
user = FactoryGirl.build(:user_password_confirmation_error)
user.should_not be_valid
end
it "当已有相同name时,user不应该被创建"do
user_fist = FactoryGirl.create(:user_right)
user = FactoryGirl.build(:user_right)
assert user.invalid?
end
it "当已有相同的email时,user不应该被创建"do
user_fist = FactoryGirl.create(:user_right)
user = FactoryGirl.build(:user_email_repeat)
assert user.invalid?
end
it "当已有相同电话号码phone_number时,user不应该被创建"do
user_fist = FactoryGirl.create(:user_right)
user = FactoryGirl.build(:user_phone_number_repeat)
assert user.invalid?
end
describe "当email地址不正确的时候,User不应该被创建" do
it "当缺少@符号时,User不能被创建"do
user = FactoryGirl.build(:user_email_error_at)
assert user.invalid?
user.should have(1).errors_on(:email)
end
it "当缺少com结尾的,user不能被创建"do
user = FactoryGirl.build(:user_email_error_com)
assert user.invalid?
user.should have(1).errors_on(:email)
end
it "当格式不对时,user不能被创建"do
user = FactoryGirl.build(:user_email_error_name)
assert user.invalid?
user.should have(1).errors_on(:email)
end
end
it "当password小于6位数时,User不应该被创建"do
user = FactoryGirl.build(:user_password_error)
assert user.invalid?
end
it"当phone_number不等于11位数时,User不应该被创建"do
user = FactoryGirl.build(:user_phone_number_error)
assert user.invalid?
end
end
it "当保存到数据库时,hashed密码应该会生成"do
user = FactoryGirl.create(:user_right)
user.hashed_password.should_not be_nil
end
describe "登录测试"do
it "当密码不正确时,不会返回用户对象"do
old_user = FactoryGirl.create(:user_right)
user = User.authenticate('name','123458')
user.should be_nil
end
it "当用户名不正确时,不会返回用户对象"do
old_user = FactoryGirl.create(:user_right)
user = User.authenticate("name1","123456")
user.should be_nil
end
describe "关于照片的测试" do
before (:each)do
@photo = Factory.create(:photo)
end
it"是否存入指定文件夹位置"do
File.should be_exists(@photo.avatar.path(:medium))
end
end
end
end