2017-12-12 17 views
0

연습을 위해 컨트롤러 동작을 테스트하고 있습니다. 내 컨트롤러에서는 데이터베이스의 이름으로 모든 고유 제품을 가져 오려고합니다.RSpec 배열 수를 확인하십시오.

def shop 
    @products = Product.select('distinct on (name) *').sort_by &:order 
    end 

수동으로 검사했는데 정상적으로 작동합니다. 지금은 내 RSpec을 사용하여 내 테스트를 설정하고 내가 그 @products 테스트 할 것은 0이 아닌 배열 큰 : 이제

RSpec.describe PagesController, type: :controller do 
    describe 'GET #shop' do 
    it 'should get all proudcts' do 
     get :shop 
     expect(assigns(:products).count).to be > 0 
    end 
    end 
end 

, I합니다 ... 기대의 여러 가지 조합을 시도했다하지만 유지 그것의 nil 또는 0이라고 말하면서, 나는 그렇지 않다는 것을 안다. 배열이 0보다 큰지 어떻게 테스트 할 수 있습니까?

답변

2

배열이 empty?에 응답하기 때문에이 작동

expect(assigns(:products)).to_not be_empty 

을보십시오. 정수 positive?

에 응답하기 때문에 이러한 옵션에 또는 실제 카운트

expect(assigns(:products).count).to eq 1 
+0

을 확인하기를 원한다면, 당신이 당신의 자신의 정규 표현을 만들 수 있지만 또 다른 방법은

expect(assigns(:products).count).to be_positive 

을 수 있습니다. 다음은 그 예입니다. https://gist.github.com/danielwestendorf/84058a8b458a4f3cfe87e13bd8b9ca9c –

+0

감사합니다. 나는 실제로 문제를 발견했다. 테스트 데이터베이스에 데이터를 입력하지 않았으므로 모든 것이 올바르게 설정되지 않았습니다. smh. – Darkisa