繁体   English   中英

在rspec NoMethodError中使用魔术:未定义的方法“ authenticates_with_sorcery!”

[英]Using sorcery in rspec NoMethodError: undefined method `authenticates_with_sorcery!'

大家好,我正在尝试测试必须在其中进行用户身份验证的控制器,但是我不断收到NoMethodError: undefined method `authenticates_with_sorcery!' 即使控制器本身也可以工作并且用户模型也可以。 所以基本上:如果我在服务器上执行该操作,则在运行rake spec可以正常运行。

用户模型

class User < ActiveRecord::Base
  authenticates_with_sorcery!

  validates :password, presence: true, confirmation: true, length: { minimum: 8 }
  validates :email, presence: true, uniqueness: true
  validates :password_confirmation, presence: true
end

用户工厂

FactoryGirl.define do
  factory :user do
    email "whatever@whatever.com"
    password "password"
    password_confirmation "password"
  end
end

控制器规格

require 'rails_helper'

RSpec.describe Admin::ImagesController, :type => :controller do

  before(:each) do
    create(:user)
    login_user_post("whatever@whatever.com", "secret")
  end

  describe "GET 'new'" do
    it "returns http success" do
      get 'new', venue_id: 1
      expect(response).to be_success
    end
  end
end

spec_helper.rb需要'factory_girl_rails'需要'巫术'

RSpec.configure do |config|
  config.include FactoryGirl::Syntax::Methods
  config.include Sorcery::TestHelpers::Rails
  config.include Sorcery::TestHelpers::Rails::Controller, type: :controller
  config.include Sorcery::TestHelpers::Rails::Integration, type: :feature
end

如果现在运行rake spec我将得到:

1) Admin::ImagesController GET 'new' returns http success
 Failure/Error: create(:user)
 NoMethodError:
   undefined method `authenticates_with_sorcery!' for #<Class:0x007fc1221c1430>
 # ./app/models/user.rb:2:in `<class:User>'
 # ./app/models/user.rb:1:in `<top (required)>'
 # ./spec/controllers/admin/images_controller_spec.rb:6:in `block (2 levels) in <top (required)>'

任何帮助深表感谢!

我想我发现了一个问题:如果我用制造商代替Factory,Factory Girl不喜欢从事魔术工作:

Fabricator(:user, :class_name => "User") do
  id { sequence }
  password { "secret" }
  email { "whatever@whatever.com" }
  salt { "asdasdastr4325234324sdfds" }
  crypted_password { Sorcery::CryptoProviders::BCrypt.encrypt("secret", "asdasdastr4325234324sdfds") }
end

效果很好。

暂无
暂无

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

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