首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在rspec中测试注册验证?(rails教程第7章练习)

如何在rspec中测试注册验证?(rails教程第7章练习)
EN

Stack Overflow用户
提问于 2012-12-13 05:35:28
回答 1查看 922关注 0票数 0

我认为这既是一个技术问题,也是一个编程实践问题。

我正在做Rails教程,这个问题涉及到第七章练习,问题2。这个问题要求您编写测试,以验证在重新加载的注册页面上出现的无效用户的错误消息(例如空白密码,无效的电子邮件地址)。

我有一些代码工作得很好,但我不觉得我真的在测试任何东西。我只是简单地测试了当我在注册页面中手动输入一个空白用户时出现的错误消息。毫不奇怪,测试通过了--我只是将错误消息复制并粘贴到测试中!

我的user_pages_spec.rb的相关部分是:

代码语言:javascript
复制
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告诉我错误消息/翻译是什么,并测试这些信息吗?如果我更改了我的验证条件之一,比如密码长度,会发生什么?类似地,当我修复有关密码摘要的错误消息时,我应该必须更改测试文件吗?

编辑:,如果我不知道确切的错误字符串会是什么呢?不应该告诉测试错误消息是什么?应该在这方面使用'have(x).errors_on‘吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-13 08:08:53

如果用户要插入用户名,而不是密码,检查结果等等,您总是可以将测试扩展到测试的地方。不过,我认为这样做太过分了。除此之外,我认为你很好。

如果要更改错误消息,则必须更改测试。但是让我们想想TDD是如何工作的。您编写测试,然后编写代码,然后在需要时重构。因此,理想情况下,您应该已经知道您的验证条件是什么。如果您希望稍后更改代码,那么您将更改测试,然后更改代码。

来自Rails测试指南:

代码语言:javascript
复制
Ideally, you would like to include a test for everything which could possibly break. It’s 
a good practice to have at least one test for each of your validations and at least one 
test for every method in your model.

我们不仅可以将其扩展到模型,还可以扩展到控制器、路由等。换句话说,测试您的代码正在做什么。例如,如果您将其设置为用户登录时看到的闪存消息,则测试以确保用户看到的是该闪存消息。如果用户做错了什么并且应该看到不同的闪存消息,那么测试以确保他们得到了不同的闪存消息。

在你读完Hartl的教程之后,我会考虑检查齐达匹配器。

下面是关于rspec最佳实践的简短自述文件

最后,Wolfram的六部分教程系列有助于学习测试什么,尽管它有点过时。

编辑:您必须在测试中写入Rails预先编写的错误消息,当然,除非您编写了自定义消息。幸运的是,您可以在Ruby国际化或Rubyl18n中找到预先编写的错误。以下是预期消息的列表:

代码语言:javascript
复制
  inclusion: "is not included in the list"
  exclusion: "is reserved"
  invalid: "is invalid"
  confirmation: "doesn't match confirmation"
  accepted: "must be accepted"
  empty: "can't be empty"
  blank: "can't be blank"
  too_long: "is too long (maximum is %{count} characters)"
  too_short: "is too short (minimum is %{count} characters)"
  wrong_length: "is the wrong length (should be %{count} characters)"
  not_a_number: "is not a number"
  not_an_integer: "must be an integer"
  greater_than: "must be greater than %{count}"
  greater_than_or_equal_to: "must be greater than or equal to %{count}"
  equal_to: "must be equal to %{count}"
  less_than: "must be less than %{count}"
  less_than_or_equal_to: "must be less than or equal to %{count}"
  odd: "must be odd"
  even: "must be even"

将正在验证的属性插入到上面的错误消息的开头,并将其插入到您的测试和查看中,这就是您应该期望从Rails中得到的错误消息。

最后,have(x).errors_on是您可以测试闪存消息的一种方法。应该匹配也有一个相关的页面,专门用于闪存消息测试。我认为任何额外的东西都是过火的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13853605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档