So, I'm trying to learn the rspec BDD testing framework in the context of a rails project. The problem I'm having is that I can't, for the life of me, get my fixtures to load properly in rspec descriptions.
所以,我正在尝试在rails项目的上下文中学习rspec BDD测试框架。我遇到的问题是,在我的生活中,我无法在rspec描述中正确加载我的灯具。
Disclaimer: Yes, there are better things than fixtures to use. I'm trying to learn one thing at a time, here (specifically rspec) before I go play with associated tools like factory-girl, mocha, auto-test, etc. As such, I'm trying to get the dead-simple, if clunky, fixtures working.
免责声明:是的,有比使用固定装置更好的东西。我正在尝试一次学习一件事,这里(特别是rspec)在我玩相关工具之前,比如工厂女孩,摩卡,自动测试等。因此,我试图让死者变得简单,如果笨重,固定装置工作。
Anyway, here's the code:
无论如何,这是代码:
/test/fixtures/users.yml -
/test/fixtures/users.yml -
# password: "secret"
foo:
username: foo
email: foo@example.com
password_hash: 3488f5f7efecab14b91eb96169e5e1ee518a569f
password_salt: bef65e058905c379436d80d1a32e7374b139e7b0
bar:
username: bar
email: bar@example.com
password_hash: 3488f5f7efecab14b91eb96169e5e1ee518a569f
password_salt: bef65e058905c379436d80d1a32e7374b139e7b0
/spec/controllers/pages_controller_spec.rb -
/spec/controllers/pages_controller_spec.rb -
require 'spec/spec_helper'
describe PagesController do
integrate_views
fixtures :users
it "should render index template on index call when logged in" do
session[:user_id] = user(:foo).id
get 'index'
response.should render_template('index')
end
end
And what I'm getting when I run 'rake spec' is:
当我运行'rake spec'时我得到的是:
NoMethodError in 'PagesController should render index template on index call when logged in'
undefined method `user' for #<Spec::Rails::Example::ControllerExampleGroup::Subclass_1:0x2405a7c>
/Library/Ruby/Gems/1.8/gems/actionpack-2.3.5/lib/action_controller/test_process.rb:511:in `method_missing'
./spec/controllers/pages_controller_spec.rb:7:
That is, it's not recognizing 'user(:foo)' as a valid method.
也就是说,它不会将'user(:foo)'识别为有效方法。
The fixtures themselves must be ok, since when I load them into the development db via 'rake db:fixtures:load', I can verify that foo and bar are present in that db.
灯具本身必须正常,因为当我通过'rake db:fixtures:load'将它们加载到开发数据库中时,我可以验证该数据库中是否存在foo和bar。
I feel like I'm missing something obvious here, but I've been tearing my hair out all day to no avail. Any help would be appreciated.
我觉得我在这里遗漏了一些明显的东西,但是我整天都在扯掉我的头发无济于事。任何帮助,将不胜感激。
2 个解决方案
#1
32
If you define fixtures as 'users', then the way to use them is via the method with the same name:
如果将灯具定义为“用户”,则使用它们的方式是通过具有相同名称的方法:
describe PagesController do
integrate_views
fixtures :users
it "should render index template on index call when logged in" do
session[:user_id] = users(:foo).id
get 'index'
response.should render_template('index')
end
end
The singular is only relevant to the class itself (User). Hope you still have some hair left if this is just a one letter bug.
单数仅与类本身(用户)相关。如果这只是一个字母的错误,希望你还剩下一些头发。
#2
7
If you want to set up your fixtures globally, inside your spec_helper
or rails_helper
you can add:
如果您想全局设置灯具,可以在spec_helper或rails_helper中添加:
RSpec.configure do |config|
config.global_fixtures = :all
end
#1
32
If you define fixtures as 'users', then the way to use them is via the method with the same name:
如果将灯具定义为“用户”,则使用它们的方式是通过具有相同名称的方法:
describe PagesController do
integrate_views
fixtures :users
it "should render index template on index call when logged in" do
session[:user_id] = users(:foo).id
get 'index'
response.should render_template('index')
end
end
The singular is only relevant to the class itself (User). Hope you still have some hair left if this is just a one letter bug.
单数仅与类本身(用户)相关。如果这只是一个字母的错误,希望你还剩下一些头发。
#2
7
If you want to set up your fixtures globally, inside your spec_helper
or rails_helper
you can add:
如果您想全局设置灯具,可以在spec_helper或rails_helper中添加:
RSpec.configure do |config|
config.global_fixtures = :all
end