You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails指南与测试报错不一致:邮件Fixture格式咨询

Rails邮件器Fixture格式问题及解决方案

问题背景

现有如下未实现逻辑的单元测试:

class CustomMailerTest < ActionMailer::TestCase
  test "message_email" do
  end
end

其中CustomMailer类定义了message_email方法。

根据Rails测试规范,邮件器对应的Fixture需放在test/fixtures/[邮件器名]目录下,因此我们在fixtures/custom_mailer目录下创建了message_email.yml,但尝试多种格式均报错:

  • 按模型Fixture格式编写:
    one:
      name: MyString
    
    运行测试报错:
    CustomMailerTest#test_message_email:
    ActiveRecord::StatementInvalid: Could not find table 'custom_mailer_message_email'
    
  • 移除顶层级键one:后调整格式:
    出现报错:
    ActiveRecord::Fixture::FormatError: fixture key is not a hash:  
    /Users/[..]/test/fixtures//custom_mailer/message_email.yml,  
    keys: ["name", "email", "phone", "message_body"]
    
  • 尝试纯文本Fixture:出现YAML语法错误或fixture is not a hash报错

正确的Fixture格式

邮件器Fixture与ActiveRecord模型Fixture格式不同,无需顶层级命名键,只需以YAML文档分隔符---开头,直接定义邮件渲染所需的变量即可。

示例test/fixtures/custom_mailer/message_email.yml:

---
name: "测试用户"
email: "test@example.com"
phone: "13800138000"
message_body: "这是测试邮件内容"

关键说明

邮件器Fixture的作用是为邮件模板提供渲染变量,并不关联数据库表。使用---明确标记YAML文档起始后,Rails会正确识别这是邮件器Fixture,而非尝试映射到数据库表,从而避免报错。

内容的提问来源于stack exchange,提问作者Jerome

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 10:08:20