Ruby on rails 是否值得测试诸如作用域之类的低级代码?

Ruby on rails 是否值得测试诸如作用域之类的低级代码?,ruby-on-rails,ruby-on-rails-4,testing,rspec,rspec-rails,Ruby On Rails,Ruby On Rails 4,Testing,Rspec,Rspec Rails,测试“核心”特性(如作用域和排序)是否真的有利可图?我有几个测试,测试功能类似于下面的内容。在我看来,它只是在测试Rails的核心功能(作用域和排序),这些功能可能已经经过了很好的测试 我知道这似乎是一个“意见”问题,但我想知道的是,如果我假设作用域/排序已经过测试,并且对开发人员来说没有测试价值,那么是否有人知道我会错过的任何东西 我的想法是,即使作用域/排序被“破坏”,如果Rails核心代码被破坏,我也无能为力,因为我没有非常非常好的理由拒绝接触核心代码(使以后的更新成为噩梦……) 我对更多

测试“核心”特性(如作用域和排序)是否真的有利可图?我有几个测试,测试功能类似于下面的内容。在我看来,它只是在测试Rails的核心功能(作用域和排序),这些功能可能已经经过了很好的测试

我知道这似乎是一个“意见”问题,但我想知道的是,如果我假设作用域/排序已经过测试,并且对开发人员来说没有测试价值,那么是否有人知道我会错过的任何东西

我的想法是,即使作用域/排序被“破坏”,如果Rails核心代码被破坏,我也无能为力,因为我没有非常非常好的理由拒绝接触核心代码(使以后的更新成为噩梦……)

我对更多的测试感到“安全”,但如果这些测试实际上没有提供价值,那么它们只会占用测试套件的空间和时间

# user.rb model
class User < ActiveRecord::Base
  scope :alphabetical, -> { order("UPPER(first_name), UPPER(last_name)") }
end

# user_spec.rb spec
context "scopes" do
  describe ".alphabetical" do
    it "sorts by first_name, last_name (A to Z)" do
      user_one = create(:user, first_name: "Albert", "Johnson")
      user_two = create(:user, first_name: "Bob", "Smith")
      ...

      expect(User.all.alphabetical.first.first_name).to eq("Albert")
    end
  end
end
#user.rb模型
类用户{order(“UPPER(first_name),UPPER(last_name)”)}
结束
#用户规范.rb规范
上下文“作用域”是什么
描述“.字母顺序”do
它“按名字、姓氏(A到Z)排序”做什么
user\u one=create(:user,名字:“Albert”,“Johnson”)
user\u two=create(:user,名字:“Bob”,“Smith”)
...
expect(User.all.alphastical.first.first_name)to eq(“Albert”)
结束
结束
结束

是的,您应该测试范围。它不是所有的内置功能;你必须写下来。它根据两个标准进行排序,因此需要两个测试,一个是证明它是按名字排序的(上面的测试显示了这一点),另一个是证明当名字相同时,它是按姓氏排序的


如果范围更简单,那么如果在验收或更高级别的单元测试中对其进行了全面测试,则可以跳过单元测试。但是只要作用域本身需要不止一个测试,您就应该在作用域本身的测试中这样做,而不是在更高级别代码的测试中。如果您尝试在更高级别代码的测试中执行此操作,读者将很难找到作用域的详细信息测试位置,如果每个调用方的测试都测试了作用域的所有功能,则可能会导致重复。

我必须同意此逻辑。如果我使用的是纯Rails作用域,我可能不需要测试它,但是因为我正在编写自己的排序方法,所以应该通过一些测试来验证它。