为什么我的Rails Test :: Unit测试中我的fixture对象不可用?

时间:2009-02-07 13:32:41

标签: ruby-on-rails testing

根据this Rails guide,如果您创建一个fixture,它将在您的测试类中可用。

我在users.yml中有这个夹具:

<%
  stan = User.new
  stan.username = 'stan'
  stan.set_hashed_password('mysterio')
  stan.email = 'stan@abc.com'
%>

stan:
  username: <%= stan.username %>
  hashed_password: <%= stan.hashed_password %>
  password_salt: <%= stan.password_salt %>
  email: <%= stan.email %>

按照Rails指南,我试图像这样访问它:

class SessionsControllerTest < ActionController::TestCase

  @user = users(:stan)

  # ...

end

我收到此错误:

./test/functional/sessions_controller_test.rb:5: undefined method `users' for SessionsControllerTest:Class (NoMethodError)
    from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
    from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
    from /usr/local/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/dependencies.rb:155:in `require'

4 个答案:

答案 0 :(得分:7)

尝试放

fixtures :users
在你的课堂宣言后

答案 1 :(得分:5)

确保你有

fixtures :all

在你的test_helper.rb

答案 2 :(得分:5)

感谢帮助人员。我意识到我有各种声明和调用结构不正确。我在引用的指南中没有明确解释这一点,但显然users(:stan)仅适用于should块内,或test_方法内的纯Test :: Unit。

答案 3 :(得分:-1)

这是一个非常古老的问题,但在阅读rails教程时,我现在遇到了类似的问题。

我在UsersLoginTest集成测试开始时有一个设置方法,由于某种原因,我在那里引用的夹具,似乎没有在测试中工作。我必须在测试@user = users(:michael)的顶部找到一条线才能使它工作。

最后,我发现我已经复制了文件顶部的类声明,通过LAZY复制并从教程书中粘贴。因此,如果有其他人遇到类似与灯具无关的问题,请检查您是否犯了与我相同的愚蠢错误,并复制了文件的顶部!

require 'test_helper'

class UsersLoginTest < ActionDispatch::IntegrationTest

  def setup
    @user = users(:michael)
  end