任峻宏的小站

任峻宏的小站

马上订阅 任峻宏的小站 RSS 更新: https://renny.ren/feed

关于 RSpec 的一点方法总结

2017年7月23日 17:07

注:原文翻译时有删改

两个主要的框架垄断了Ruby的测试界:Rspec 和 MiniTest. Rspec 是一个非常有表现力的测试框架,它有很多好的特性和辅助方法来让测试变得可读。当我们用 Rspec 写测试的时候,有几个小的方法,或许可以让测试更好写、更易读、更利于维护。

现在假设有一个系统,有书(Books) 和 作者(Authors),让我们使用一些方法来简化测试。

class Book
  attr_reader :title, :genre

  def initialize(title, genre)
    @title = title
    @genre = genre
  end
end

class Author
  attr_reader :books

  def initialize(name, books)
    @name = name
    @books = Array(books)
  end

  def has_written_a_book?
    !books.empty?
  end
end

 

let 和 subject

let() 有两个好处: - 不用赋值给实例变量就可以缓存值; - 定义的变量是“惰性计算”的,不调用就不会执行赋值操作;

subject{} 可用来声明测试的对象,后续的测试用例就无需明确指定了。

通过声明 letsubject 变量是一个保持测试可读性和不重复自己(DRY)的好方法。

举个例子,如果我们想确认一个作者有名字(assert an Author has a name),如果不用 letsubject变量,测试大概长这样:

describe Author do...

剩余内容已隐藏

查看完整文章以阅读更多