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: MyStringCustomMailerTest#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
相关产品推荐
相关产品推荐

