Using shoulda to refactor rspec tests on Rails models

前端 未结 5 2279
闹比i
闹比i 2021-02-14 00:57

After learning about shoulda-matchers by answering another StackOverflow question on attribute accessibility tests (and thinking they were pretty awesome), I decided to try refa

5条回答
  •  生来不讨喜
    2021-02-14 01:40

    1) The Shoulda::Matchers::ActiveRecord module has a lot more in it than just column and index matchers. I would dig around in the included classes a little and see what you can find. This is where the have_many, belong_to etc come from. For the record though, I see little value in most of what is in there.

    2) Yes, macros such as have_many test a lot more than whether or not a model responds to a method. From the source code, you can see exactly what it is testing:

    def matches?(subject)
      @subject = subject
      association_exists? &&
        macro_correct? &&
        foreign_key_exists? &&
        through_association_valid? &&
        dependent_correct? &&
        class_name_correct? &&
        order_correct? &&
        conditions_correct? &&
        join_table_exists? &&
        validate_correct?
    end
    

    3) Making the tests more readable and/or concise is definitely a subjective question to answer. Everyone will give you a different answer to this depending on their background and experience. I would personally get rid of all of the respond_to tests and replace them with tests that have value. When someone looks at your tests, they should be able to understand the public API for that class. When I see that your objects respond_to something like "following?", I can make assumptions, but don't really know what it means. Does it take an argument? Does it return a boolean value? Is the object following something or is something following the object?

提交回复
热议问题