我可以在哪里放置不属于模型的测试数据?

时间:2019-07-09 10:02:56

标签: ruby-on-rails ruby-on-rails-5 minitest

我想针对无效电子邮件地址列表进行测试。目前,它们使用我的setup方法:

  def setup
    @invalid_email_addresses = [
      'plainaddress',
      '#@%^%#$@#$@#.com',
      '@domain.com',
      'Joe Smith <email@domain.com>',
      'email.domain.com',
      'email@domain@domain.com',
      '.email@domain.com',
      'email.@domain.com',
      'email..email@domain.com',
      'あいうえお@domain.com',
      'email@domain.com (Joe Smith)',
      'email@domain',
      'email@-domain.com',
      'email@domain.web',
      'email@111.222.333.44444',
      'email@domain..com'
    ]
  end

这使方法相当长。我想将它们移至yml文件中:

# test/fixtures/email_addresses.yml
invalid_email_addresses:
    - 'plainaddress'
    - '#@%^%#$@#$@#.com'
    - '@domain.com'
    - 'Joe Smith <email@domain.com>'
    - 'email.domain.com'
    - 'email@domain@domain.com'
    - '.email@domain.com'
    - 'email.@domain.com'
    - 'email..email@domain.com'
    - 'あいうえお@domain.com'
    - 'email@domain.com (Joe Smith)'
    - 'email@domain'
    - 'email@-domain.com'
    - 'email@domain.web'
    - 'email@111.222.333.44444'
    - 'email@domain..com'

但这会导致每次测试都出错:

  

ActiveRecord :: Fixture :: FormatError:夹具密钥不是哈希:/Users/stefan_edberg/Rails/tennis_app/test/fixtures/emaild_addresses.yml,密钥:[“ invalid_email_addresses”]

如果不在固定装置中,这些电子邮件地址应该放在哪里?

1 个答案:

答案 0 :(得分:1)

错误共享本身表明在解析YAML内容时存在一些问题。我将以下内容保存在桌面上的文件test.yml

# test/fixtures/email_addresses.yml
invalid_email_addresses:
  - 'plainaddress'
  - '#@%^%#$@#$@#.com'
  - '@domain.com'
  - 'Joe Smith <email@domain.com>'
  - 'email.domain.com'
  - 'email@domain@domain.com'
  - '.email@domain.com'
  - 'email.@domain.com'
  - 'email..email@domain.com'
  - 'あいうえお@domain.com'
  - 'email@domain.com (Joe Smith)'
  - 'email@domain'
  - 'email@-domain.com'
  - 'email@domain.web'
  - 'email@111.222.333.44444'
  - 'email@domain..com' 

,然后尝试从irb加载它,并成功加载:

enter image description here

请注意:最初,当我复制文件中的YAML内容并尝试加载它时,遇到解析错误,然后删除了以下条目并再次尝试,解析成功

- 'あいうえお@domain.com'`

该条目包含Unicode字符。由于YAML是缩进敏感的,因此按原样复制该条目会导致缩进不一致,从而导致解析错误。修复该条目的缩进使解析成功。