2011-06-13 5 views
0

나는 다음과 같은 단위 테스트를 실행하기 위해 노력하고있어 업데이트되지 않습니다레일 단위 테스트는 데이터베이스

<#<Usuario ID: 1000003, login: "longbob", hashed_password: "078cf6ae2de80ed6c004c8c8576a5572e077a52c", salt: "1000", nombre: nil, apellido: nil, email: "[email protected]", telefono: nil, tipo_usuario: nil, foto: nil, bol_activo: nil>> expected but was <nil>. 

가 여기 내을 인증 방법입니다 :

:

def self.authenticate (login, pass) 
    u=find(:first, :conditions=>["login = ?", login]) 
    return nil if u.nil? 
    return u if Usuario.encrypt(pass, u.salt)==u.hashed_password 
    nil 
    end 

또한, 나는 다음과 같은 정의

def password=(pass) 
    @password=pass 
    self.salt = Usuario.random_string(10) if !self.salt? 
    self.hashed_password = Usuario.encrypt(@password, self.salt) 
    end 

그래서 "암호"를 할당 할 때마다 hashed_password를 업데이트해야한다고 생각합니다 ... 맞습니까?

무슨 일입니까?

Thx.

는 UPDATE :

assert_equal @longbob, Usuario.autenticar("longbob", "nonbobpasswd")

그것은 그 테스트를 통과

assert_equal @longbob2, Usuario.autenticar("longbob", "nonbobpasswd")

에, 그러나 그것은 같은 Trowing ... 다음 줄에 실패은 내가 변경하는 경우 것으로 나타났습니다 오류 ... 그게 뭐야?

+0

'Usuario'는'User'에 대한 타이핑 오류입니까? 아니면 실제로 두 개의 다른 클래스를 사용합니까? 그렇다면'authenticate' 두 가지 메소드의 소스 코드를 제공해 주시겠습니까? –

+0

유형은 ...이미 수정 됨 – tiiin4

+0

'@ longbob.save'가 레코드를 업데이트했는지 확인 했습니까? 저장 후 'assert_nil Usuario.authenticate ("longbob", "longtest")와 같은 테스트를 추가 할 수 있습니다. –

답변

0

이 내 댓글 이후에 대답하기 위해, 우리는 문제가 데이터베이스의 레코드를 업데이트하지 않습니다 save에 대한 호출이 것을 찾을 수 있습니다. 나는 당신에게이 행동을보고 또 그것을 고칠 수있는 또 다른 테스트를 작성하라고 제안했다. 테스트가 너무 길어지기 시작했다. 실제로 버그는 인증 메커니즘과 관련이 없다.

def test_change_password_save 
    old_hash = @longbob.hashed_password 
    @longbob.password = "nonbobpasswd" 
    @longbob.password_confirmation = "nonbobpasswd" 
    @longbob.save 
    assert_not_equal(old_hash, @longbox.reload.hashed_password) 
end 

이 테스트가 실패하면, 당신이이 버그에 대한 유래에 또 다른 질문을 작성하는 제안 : 여기

은 내가 작성합니다 테스트입니다.

0

아마 유효성 검사 오류가 발생합니다. @longbob.errors의 내용을 확인하십시오.

이것을 두 개의 별도 명령문으로 나누면 어떻게됩니까? #password_confirmation= 실제로 방법은 구현 방법에 따라, 자신에게 전달 된 값을 반환하지 않을 수 있습니다 방법입니다,

@longbob.password = @longbob.password_confirmation = "nonbobpasswd" 

참조 (어떤 좋은 연습 어쨌든).

+0

같은 오류가 있습니다 : <# > 예상했지만, 이었습니다. – tiiin4

0

암호 변수를 변경해도 데이터베이스의 hashed_password 필드가 업데이트되지 않을 수 있습니다.

당신은 아마 Usuario이 같은 뭔가가 필요 :

before_save :rehash 

def rehash 
    self.hashed_password = ??? #replace ??? with whatever your hashing logic is 
end 
+0

내 게시물을 다시 확인하고, 뭔가 추가했습니다. – tiiin4

관련 문제