根据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'
答案 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