Rails学习 - 固件

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

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

简单的使用示例

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

  1. 在模型对应的固件文件中编写测试数据
unistart:
  name: unistart
  email: 2604249649@qq.com
  password_digest: <%= User.digest('password') %>
  1. 编写测试文件,并使用固件中的数据
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