繁体   English   中英

Rails测试规范不会建立我的用户模型

[英]Rails test spec will not build my user model

Rails测试中有很多活动部件,因此有时很难调试失败的测试。

作为一个适当的例子,我试图使用zeus,guard,rspec,capybara,Poltergeist,PhantomJS和FactoryGirl来简单地构建User工厂。

我遇到以下错误消息:

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

错误保持不变。 测试根本找不到此属性。 请记住,此代码在浏览器中可以完美运行。 我不在同盟中。 我要去哪里错了?

您的测试数据库架构是最新的吗?

rake db:test:prepare

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM