【发布时间】:2015-09-16 14:44:10
【问题描述】:
我有两个模型:
# app/models/user.rb
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable, :confirmable
has_many :teams, dependent: :destroy
end
和
# app/models/team.rb
class Team < ActiveRecord::Base
belongs_to :user
validates_presence_of :user
end
我正在尝试使用Rspec 和factory_girl_rails 测试我的TeamsController。
在创建新团队之前,我需要一个经过身份验证的用户。
我创建了一个:用户工厂:
FactoryGirl.define do
factory :user do
first_name "John"
last_name "Doe"
email {|n| "email#{n}@email.com" }
mobile_phone "1235551234"
company_name "Widgets Inc."
password "password"
end
end
这里是teams_controller_spec.rb的相关部分:
require 'rails_helper'
RSpec.describe TeamsController, type: :controller do
# This should return the minimal set of values that should be in the session
# in order to pass any filters (e.g. authentication) defined in
# TeamsController. Be sure to keep this updated too.
let(:valid_session) { {} }
describe "GET #index" do
it "assigns all teams as @teams" do
user = FactoryGirl.create(:user)
team = Team.create!(name: "New Team Name", user: user)
get :index, {}, valid_session
expect(assigns(:teams)).to eq([team])
end
end
end
测试失败:
1) TeamsController GET #index assigns all teams as @teams
Failure/Error: get :index, {}, valid_session
NoMethodError:
undefined method `authenticate' for nil:NilClass
我不明白我需要如何填充 :valid_session 才能通过测试。我以为我必须显式调用身份验证方法,但这可能不是真的。我正在尝试测试团队控制器...不是用户身份验证。
任何建议将不胜感激。
【问题讨论】:
-
您能否说明在创建团队时要求用户在哪里进行身份验证?你看过this吗?
-
如果你不使用设计,你可以在这里看到我的解决方案:stackoverflow.com/questions/39881504/…
标签: ruby-on-rails rspec devise controller rspec-rails