参考书籍:
Ruby on Rails 教程(第四版)

固件(fixture)是 Rails 中组织测试数据的一种方式,这些数据会载入测试数据库

# 简单的使用示例

例如,我们有一个 User 模型,它有 nameemailpassword_digest 三个字段,那么我们可以通过如下操作来进行测试

  1. 在模型对应的固件文件中编写测试数据
test/fixture/users.yml
unistart:
  name: unistart
  email: 2604249649@qq.com
  password_digest: <%= User.digest('password') %>
  1. 编写测试文件,并使用固件中的数据
test/integration/users_login_test.rb
require "test_helper"
class UsersLoginTest < ActionDispatch::IntegrationTest
  def setup
    @user = users(:unistart)
  end
  ...
  test "login with valid information" do
    get login_path
    post login_path, params: { session: { email: @user.email, password: "password" } }
    assert_redirected_to @user # 检查重定向地址是否正确
    follow_redirect! # 访问重定向地址
    assert_select "a[href=?]", login_path, count: 0
    assert_select "a[href=?]", logout_path
    assert_select "a[href=?]", user_path(@user)
  end
end
users(:unistart)的说明

在上面的测试文件中,我们使用 setup 方法,在每个测试用例执行前生成一个名为 @user 的实例变量,同时该变量的值由对应固件文件 users.yml 中定义的 unistart 提供,也即 users 方法对应 users.yml 固件文件, :unistart 对应固件文件中定义的用户 unistart

更新于 阅读次数