Domanda

Sto cercando di fare qualche test cetriolo come il seguente:

Given I am logged in as admin
When I go to the article page
Then I should see "Edit Article"
And I should see "Article Title"

dove il percorso alla pagina dell'articolo è "articoli / 1" o qualche nota id.The problema è che quando inserisco i miei dati utilizzando la mia definizione passo

Article.create(:name => "Article Title")

Non posso sapere in anticipo ciò che l'id sarà quando si inserisce il record.

Essenzialmente, mi sia bisogno

a) per poter inserire ids prevedibili. Ho provato il metodo menzionato nella risposta di questa domanda ma doesn 't sembrano funzionare per me -. si inserisce sempre un ID diverso

o

b) scrivere i miei passi di cetriolo in modo tale che posso passare in un parametro per il mio articolo id

Tutti i tutorial di cetriolo che ho visto una sorta di sorvolare questo tipo di scenario -. È sempre andare al elenco di tutti gli articoli o qualsiasi altra cosa, non una pagina di dettaglio specifica

Ogni aiuto sarebbe apprezzato. Grazie!

È stato utile?

Soluzione

Ci sono due modi per creare valori ID prevedibili. Il primo è quello di impostare manualmente l'ID sul creare:

model = Model.new(options)
model.id = DESIRED_ID
model.save

Il problema qui è che le opzioni trasmesse a uno nuovo, creare o update_attributes non influiranno sul valore di ID, che è il motivo per cui la chiamata a model.id è, purtroppo, necessario.

Un'alternativa è quella di ripristinare l'intera tabella prima di eseguire i test. Questo può essere modificato per tenere conto di infissi, se necessario. Ad esempio:

class Model < ActiveRecord::Base
  def self.reset!
    connection.execute("DELETE FROM #{table_name}")
    connection.execute("ALTER TABLE #{table_name} AUTO_INCREMENT=1")
  end
end

Questo imposterà l'ID della prima riga inserita essere un prevedibile 1.

Altri suggerimenti

Come sulla navigazione alla pagina dell'articolo in modo che un utente avrebbe fatto? Il tuo passo

When I go to the article page

potrebbe essere cambiato in

When I go to the page for the "Article Title" article

e la tua definizione passo va a una panoramica articolo, trova un legame con "Titolo articolo" e accede alla pagina in quel modo.

È possibile ottenere più copertura di test, e non devono preoccuparsi di ID.

Come di fare "Vai all'articolo pagina" andare a "/ articoli / # {} Article.first.id"

Questo è quello che io uso:

# feature
Scenario: creator archives fragment
  When fragment 1 exists
  And I am the fragment owner
  And I am on fragment 1

#steps
def create_fragment(attribs)
  force_id = attribs[:force_id]
  attribs.delete(:force_id) if force_id
  fragment = Fragment.create!({ :owner_id => @current_user.id, :originator_id => @current_user.id}.merge(attribs))
  if force_id
    fragment.id = force_id.to_i
    fragment.save!
  end
  fragment
end

When /^fragment (.*) exists$/ do |frag|
  @fragment = Fragment.find_by_id(frag)
  @fragment.destroy if @fragment
  @fragment = create_fragment(:force_id => frag.to_i,:description => "test fragment #{frag}",:narrative => "narrative for fragment #{frag}")
end


# paths.rb
when /fragment (.*)/
fragment_path($1)

Buon divertimento.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top