2015-02-14 22 views
7

Quindi con rails 4.2.0 e l'ultimo rspec ho generato un test di base per il mio controller. Sono solo bloccato su come testare l'immagine di una graffetta negli attributi_valida.Test del controller RSpec con graffetta

Dalla ricerca intorno finora mi è venuta in mente questa (che non funziona):

let(:valid_attributes) {{name: 'The New Room', description: 'This is the brand new room', size: '250', capacity: '100', price: '650', picture: '#{rails.root}/spec/support/room-controller-valid.jpg', rmcat_id: '1'}} 

c'è un altro modo per fare questo? O devo includere un helper per far funzionare paperclip con RSpec?

L'errore che sto ottenendo nel terminale è:

Failure/Error: room = Room.create! valid_attributes Paperclip::AdapterRegistry::NoHandlerError: No handler found for "\#{rails.root}/spec/support/room-controller-valid.jpg

risposta

8

provare a impostare gli attributi di metadati Paperclip, invece di fornire un vero e proprio :picture attaccamento.

... 
picture_file_name: 'room-controller-valid.jpg', 
... 

Se state convalidando tipo di contenuto dell'allegato o dimensione, impostare questi attributi così:

... 
picture_file_name: 'room-controller-valid.jpg', 
picture_content_type: 'image/jpeg', 
picture_file_size: 1.megabyte, 
... 

Naturalmente, questo non passerà il file al controller, quindi non è necessario il file per realizzare questo. Ma l'istanza del modello dovrebbe passare la convalida. Dal Paperclip README:

Paperclip si concluderà a quattro attributi (tutte prefisso il nome di tale attaccamento , in modo da poter avere più allegati per ogni modello, se lo si desidera) e dare loro un front-end amichevole . Questi attributi sono:

<attachment>_file_name 
<attachment>_file_size 
<attachment>_content_type 
<attachment>_updated_at 

Per impostazione predefinita, è necessario solo _file_name per il funzionamento di paperclip. È necessario aggiungere _content_type nel caso in cui si desideri utilizzare la convalida del tipo di contenuto .