我认为这既是一个编程实践问题,也是一个技术问题。
我正在学习 Ruby on Rails 教程,并且正在学习第 7 章练习,问题 2。这个问题要求您编写测试来验证无效用户的错误消息是否出现在重新加载的注册页面上(例如,空白密码、无效电子邮件地址)。
我有一些运行良好的代码,但我觉得我实际上并没有测试任何东西。我只是测试了当我手动将空白用户输入到注册页面时出现的错误消息的存在。不出所料,测试通过了——我只是将错误消息复制并粘贴到测试中!
我的相关部分user_pages_spec.rb
是:
describe "signup" do
before { visit signup_path }
let(:submit) { "Create my account" }
describe "with invalid information" do
it "should not create a user" do
expect { click_button submit }.not_to change(User, :count)
end
describe "after submission" do
before { click_button submit }
it { should have_selector('title',text: 'Sign up') }
it { should have_content('error') }
it { should have_content('Password digest can\'t be blank') }
it { should have_content('Name can\'t be blank') }
it { should have_content('Email can\'t be blank') }
it { should have_content('Email is invalid') }
it { should have_content('Password can\'t be blank') }
it { should have_content('Password is too short (minimum is 6 characters)') }
it { should have_content('Password confirmation can\'t be blank') }
end
end
这是正确的方法吗?我不应该让 Ruby 告诉我错误消息/翻译是什么,并测试它们吗?如果我更改其中一个验证条件(例如密码长度)会发生什么情况? 同样,当我修复有关密码摘要的错误消息时,我是否必须更改我的测试文件?
编辑:如果我不知道确切的错误字符串是什么?Ruby 不应该告诉测试错误消息是什么吗?我应该为此使用'have(x).errors_on'吗?.