gpt4 book ai didi

ruby-on-rails-3 - FactoryGirl + RSpec + Rails 3 'undefined method ='

转载 作者:行者123 更新时间:2023-12-03 11:31:59 27 4
gpt4 key购买 nike

我对 Rails 和 TDD 相当陌生(毫无疑问,从我的帖子中可以看出这一点)并且很难将我的大脑围绕在 Rspec 和 FactoryGirl 上。

我正在使用 Rails 3、rspec 和工厂女孩:

gem 'rails', '3.0.3'
# ...
gem 'rspec-rails', '~>2.4.0'
gem 'factory_girl_rails'

我有一个用户模型,我已经在开发过程中成功地运行了测试,但随后需要向其中添加一个名为“源”的属性。它用于确定用户记录的最初来源(本地与 LDAP)。

在我的 factory.rb 文件中,我定义了几个工厂,如下所示:
# An alumnus account tied to LDAP
Factory.define :alumnus, :class => User do |f|
f.first_name "Mickey"
f.last_name "Mouse"
f.username "mickeymouse"
f.password "strongpassword"
f.source "directory"
end

我定义了一个宏(一直工作到现在),如下所示:
def login(user)
before(:each) do
sign_out :user
sign_in Factory.create(user)
end
end

我在像这样的多个规范中调用它(来自 users_controller_spec.rb 的示例):
describe "for non-admins or managers" do
login(:alumnus)

it "should deny access" do
get :index
response.should redirect_to(destroy_user_session_path)
end

end

如果我不指定“源”属性,一切正常,但是一旦我这样做,运行测试时就会出现这样的错误
  12) UsersController for non-admins or managers should deny access
Failure/Error: Unable to find matching line from backtrace
NoMethodError:
undefined method `source=' for #<User:0x00000100e256c0>

我可以从 rails 控制台和应用程序本身访问属性没有问题,它列在用户模型的 attr_accessible 中。就好像 Rspec 看到了我的模型的旧版本并且没有意识到我已经向它添加了一个属性。但是如果我将以下行放入我的用户模型中,错误就会消失
attr_accessor :source

...这向我表明它实际上正在查看正确的模型。

帮助!

最佳答案

运行这个怎么样?

rake db:test:load

[如果您添加了新属性,则需要将其迁移到测试数据库。]

关于ruby-on-rails-3 - FactoryGirl + RSpec + Rails 3 'undefined method <attribute>=',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4949319/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com