2012-05-14 16 views
6

Ho osservato i RailsCasts di Ryan Bates da anni e sono anche un cliente della parte retributiva del sito. Ho imparato BDD dal guardare gli episodi di Cucumber in passato.Rails 3 testing framework confusion

ora ho imparato a conoscere TestUnit, RSpec, Capybara, e MINITEST. Sto iniziando a confondermi su cosa sia.

Qual è la differenza tra questi 4 articoli? So che ovviamente Cucumber esegue funzionalità di testo in chiaro e credo che potrebbe essere considerato un test di integrazione.

Ma ora vedo anche che le versioni recenti di cetriolo richiedono MINITEST? Cucumber è semplicemente un DSL che si trova in cima a un framework di test?

So anche che RSpec ha la sua zucchero sintattico per fare affermazioni, il "descrivono" blocchi. E sembra che MiniTest supporti anche questa sintassi.

so che Capybara è utilizzato per guardare il contenuto della pagina web che viene generato, credo.

Ecco la mia domanda:

Se sto creando un nuovo Rails 3.2 applicazione, quale combinazione di questi programmi di test devo usare? Che cosa sarebbe più utile è una lista che spiega come queste gemme ed i loro processi associati si completano a vicenda, se del caso, come:

Cucumber is a DSL for driving BDD 
Cucumber is for integration tests and is based on creating user stories that are customer-readable 
It implements its tests behind the scenes via MiniTest 
MiniTest is a new testing framework that comes with Ruby 1.9 and is very fast. 
MiniTest is also used for unit testing, such as testing controllers and models 
It does not yet have as many features as RSpec 
Cucumber also uses Capybara to access DOM elements from a javascript-enabled browser simulator such as Selenium 
When you test in Rails, you have the ability to do the following kinds of tests: controllers, views, models, and integration (MVC together) 
Some people just do integration and model testing, because they feel that integration testing handles enough of the controller and view testing itself, and anything too complex can simply be moved up to the model 

Grazie mille per tutto l'aiuto che si può offrire per cancellare queste idee per me.

risposta

8

Va bene, così mi permetta di cercare di spiegare, in base alla mia esperienza

Cetriolo, è uno strumento ATDD (o BDD) che permette di scrivere i test in un linguaggio di dominio business-oriented. L'utilizzo principale è uno strumento di conversazione con i proprietari del prodotto. Invece di scrivere requisiti dettagliati, si esprimono quei requisiti come esempi del sistema sotto test. Ogni test di cetriolo, in effetti, diventa un requisito aziendale che deve essere soddisfatto.

Lo strumento Cucumber stesso, traduce queste istruzioni in testo semplice in un piccolo modulo per l'esecuzione del codice in Ruby. Quale Ruby Library si utilizza all'interno delle definizioni di passaggio dipende interamente dal progetto su cui si sta lavorando.

Il modo più sicuro per descrivere cetriolo è che si tratta di un framework di test con l'accento sulla comunicazione tra IT e Business Partner, che è il motivo per cui sta diventando così popolare.

Rspec e Minitest sono altri framework con altri punti di forza, ma mancano di questo fattore di leggibilità aziendale, in quanto sono per lo più codice e non quasi leggibili per una persona non tecnica. Ciò non è necessariamente una cosa negativa, soprattutto se il proprietario del tuo prodotto è un po 'più disponibile.

Come si lega a qualcosa come Capybara? Capybara è una libreria di automazione per test di integrazione che guida un browser headless nel framework Rack :: Test per test molto rapidi e ha un DSL altamente leggibile. L'unico lato negativo è Rack :: Test non supporta javascript, quindi fornisce un modo per eseguire il failover su Selenium se si esegue un test javascript. Sia Rspec che Cucumber dispongono di meccanismi per l'attivazione di questo failover.

Ci sono un sacco di altre librerie di automazione di Ruby.Ad esempio, se stai eseguendo il test su un'app Web non di tipo rails, i tuoi scenari cetriolo potrebbero essere definiti con Watir-Webdriver che guiderà un browser Web completo come fa Capybara in modalità Javascript. La differenza principale è che WW ha un set di selettori molto più robusto di Capybara, quindi è un po 'più facile scrivere specialmente se il tuo codice non è super pulito (Capybara supporta solo la selezione per ID, Valore e Testo, mentre WW supporta la selezione quasi nulla)

Quindi è probabile che vogliate utilizzare RSpec o Minitest per il test dell'unità) o il Test predefinito :: Unità) e Cucumber per Test di integrazione SE avete un proprietario di un prodotto interessato o un bisogno per un linguaggio comune per scenari di test. Se non lo fai, puoi scrivere i tuoi test di integrazione come esempi Rspec o l'equivalente minitest senza perdere molto.

+0

Molto aiuto. Grazie mille DVG. – Saim