Rails 5가 출시되었습니다. 이제 기본 로그인/CRUD 앱을 업그레이드하여 Devise를 4.2로 업데이트하는 새로운 프레임 워크를 사용했습니다. 문제가 하나만있는 rspec
테스트를 제외하고는 상당히 직설적이었습니다. 나는 pry
코드를 밟아 보았지만 그 문제는 저를 넘어선 것이 었습니다. 모든 포인터는 감사하겠습니다.Rspec 및 Devise 4.2 : 작동했던 모델 테스트의 ArgumentError
Failures:
1) User email rejects email addresses with improper format
Failure/Error: expect(user).not_to be_valid
ArgumentError:
wrong number of arguments (given 0, expected 1)
# ./spec/models/problem_test_user_spec.rb:13:in `block (4 levels) in <top (required)>'
# ./spec/models/problem_test_user_spec.rb:11:in `each'
# ./spec/models/problem_test_user_spec.rb:11:in `block (3 levels) in <top (required)>'
가 깎았 다운 테스트입니다 :
이
는 오류가 여기에class User < ApplicationRecord
devise :database_authenticatable, :validatable
validates :email, length: { maximum: 254 } # max length per RFC 3696, errata ID 1690
end
내 공장 : 여기
1 require 'rails_helper'
2 require 'devise'
3
4 RSpec.describe User, type: :model do
5 let (:user) { FactoryGirl.create :user }
6
7 describe "email" do
8 it "rejects email addresses with improper format" do
9 invalid_addresses = %w[ [email protected],com user_at_foo.org [email protected] ]
10
11 invalid_addresses.each do |addr|
12 user.email = addr
13 expect(user).not_to be_valid
14 end
15 end
16 end
17 end
그리고 나의 모델입니다
FactoryGirl.define do
factory :user do
name { Faker::Name.name }
tone_name { "#{Faker::Company.name} Tone" }
email { Faker::Internet.email }
password SOME_PASSWORD
password_confirmation SOME_PASSWORD
admin false
end
end
하나의 추신 : 내 개발 환경에서 앱이 제대로 실행되지만 레일스 4.2 버전이 rspec
테스트를 통과하고 잘못된 비밀번호로 캐치하는 [email protected],com
양식의 잘못된 비밀번호가 허용됩니다.
또 다른 단서 : Devise가 기본값 email_regexp
을 v4.1에서 덜 엄격한 표현으로 변경했다고 배웠습니다. 이전에는 불법으로 확인 된 이메일 주소가 허용 되었기 때문에 실제로 테스트에 실패했습니다. ArgumentError
이 내 코드에 없습니다. 나는 Devise 나 Rspec에서 오류라고 생각한다.
12: invalid_addresses.each do |addr|
13: user.email = addr
14: binding.pry
=> 15: expect(user).not_to be_valid
16: end
17: end
18: end
19: end
[1] pry(#<RSpec::ExampleGroups::User::Email>)> user.inspect
ArgumentError: wrong number of arguments (given 0, expected 1)
from /Users/tarsa/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/devise-4.2.0/lib/devise/models/database_authenticatable.rb:146:in `password_digest'
유증 코드가 잘못 될 보이지 않는, 내가 액티브 일부 상호 작용이 진행되고 의심,하지만 난 : 내 테스트에서 binding.pry
를 넣어 경우, 나의 모델에 대한 간단한 #inspect
이 (가) 다음과 같은 원인 이 시점에서 내 디버깅 기술의 한계에 도달했습니다.
email_regexp
의 4.0.3 버전을 사용하도록 Devise를 구성하면이 문제를 해결할 수 있습니다. 모든 암호 문자열이 유효하지 않은 것으로 인식되면 어디서나 버그는 간지럽지 않습니다.
공장 정의는 무엇입니까? –
공장 정의가 추가되었습니다. –
사용자 클래스가 여전히'ActiveRecord :: Base'에서 상속 받고 있음을 주목하십시오. 새로운 슈퍼 클래스를 만들었습니까? ([참조 가이드] (http://edgeguides.rubyonrails.org/upgrading_ruby_on_rails.html#active-record-models-now) -inherit-from-applicationrecord-by-default))? 사용자는'User
Huw