Rails测试有很多活动部分,有时很难调试失败的测试。
作为一个例子,我试图使用zeus,guard,rspec,capybara,Poltergeist,PhantomJS和FactoryGirl来简单地构建一个用户工厂。
我收到以下错误消息:
spec/models/user.rb
require 'spec_helper'
describe User do
describe 'Factories' do
it { expect(build :user).to be_valid }
end
end
spec/factories/users.rb
FactoryGirl.define do
factory :user do
sequence(:email) { |n| Forgery(:internet).email_address }
sequence(:company) { |n| Forgery(:name).company_name }
password "password"
password_confirmation "password"
end
end
现在我的请求规范在以下行中失败,这是开头的设置:
let!(:user) { login_user }
失败的是:
Failure/Error: let!(:user) { login_user }
NoMethodError:
undefined method `last_logged_in_at=' for #<User:0x007fe60aca95e8>
# ./app/models/user.rb:136:in `set_login_time'
# ./app/controllers/sessions_controller.rb:24:in `create'
# ./spec/support/login_macros.rb:7:in `login_user'
# ./spec/requests/app_integration_spec.rb:5:in `block (2 levels) in <top (required)>'
# ./custom_plan.rb:12:in `spec'
# -e:1:in `<main>'
所以问题似乎是因为User不是真正的对象,所以没有last_logged_in_at
这样的属性。所以我应该在某个地方嘲笑。我尝试将其放在工厂代码中:
before(:build) do |u|
u.stub!(:read_attribute).with(:last_logged_in_at).and_return(Time.now)
end
错误保持不变。测试根本无法找到此属性。请记住,此代码在浏览器中完美运行。我离开了我的联盟。我哪里错了?
答案 0 :(得分:1)
您的测试数据库架构是最新的吗?
rake db:test:prepare