参考书籍:
Ruby on Rails 教程(第四版)
固件(fixture)是 Rails 中组织测试数据的一种方式,这些数据会载入测试数据库
# 简单的使用示例
例如,我们有一个 User
模型,它有 name
, email
, password_digest
三个字段,那么我们可以通过如下操作来进行测试
- 在模型对应的固件文件中编写测试数据
unistart: | |
name: unistart | |
email: 2604249649@qq.com | |
password_digest: <%= User.digest('password') %> |
- 编写测试文件,并使用固件中的数据
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