2010-07-08 8 views
17

SaS kullanılan bir web uygulaması yazıyorum. Her müşterinin kendi db ve uygulama dizini vardır, bu yüzden web sitelerini çalıştırmak için gerekli tüm minimum verileri (tohum verilerini) oluşturan bir komisyon görevim vardır: varsayılan haklar ve roller, bir süper kullanıcı kullanıcısı, bir "us_states" tablosu zaten doldurulmuş, bazı yerel depolar ve terminaller (bir lojistik uygulaması).Salatalık testlerinde tohum verileri

Onun için herhangi bir salatalık senaryosu yok ve biraz önce çalışmaya başladım. Ben salatalık ile yeni başlayan biriyim.

İlk olarak bu tohum veri görevini verilen bir çizgiye koydum, ancak bu neredeyse tüm senaryolar için verilen bir şeydir ve senaryolara bakmayan programcılar için pek anlamlı değildir (insanlar için bilinçli bir şekilde ifade edilmesine gerek olmadığı için böyle bir şeydir, bu yüzden onu hooks.rb'ye taşıdım.

İlk senaryo şöyle görünür:

 
    1 Feature: Place an order 
    2 In order to keep orders in the database 
    3 As a admin 
    4 I want to place orders 
    5 
    6 Scenario: Using common legs 
    7 Given I have 1 customers 
    8 And I'm on the homepage 
    9 And I follow "Place an Order" 
10 When I select the customer 
11 And I select the SSLine 
12 And I click "Use Common Legs" 
13 Then I should see "PICKUP AT" 
14 And I should see "DELIVER TO" or "LOAD AT" 
15 And I should see EMPTY RETURN 

Benim hooks.rb şöyle görünür:

1 Before do 
2 MinimumData.new('costi', '1234').populate #username and password 
3 end 

Sorular:

  1. Bu MinimumData çalıştırmak istemiyoruz. her senaryodan önce görevi doldurur, çünkü 8 saniye sürer. Dünya çapında bir kez koşturmalı mıyım? Nasıl?
  2. Veritabanını After.do ile temizlemem gerekir mi? Bunu gerçekten yapmak istemiyorum çünkü Mantık'taki mantığı, sadece Model.delete_all deyimleriyle çoğaltacağım. İlk çalışmamdan sonra test db'nin hala bu veriyi içerdiğini fark ettim. Rake db ile temizleyebilirim: test: temizle ve yeniden başlat. Bu iyi bir uygulama mı?

cevap

22

Salatalarda before(:all) eşdeğerini bilmiyorum.

require File.dirname(__FILE__) + '/seeds' 

veya alternatif

#just write the code you want to execute directly into the env.rb file 

Bunlar: Ne yapabilirdi senin environment.rb çizgi koymak gerekir hat sizin features/support/env.rb üstündeki ve altındaki ardından features/support/seeds.rb söylemek bir dosyaya tohum ekleyip olduğunu kullanılabilir bloklar env.rb

Before do 
    #this code is run before each scenario 
end 

after do 
    #this code is run after each scenario 
end 

at_exit do 
    #this code is run at the end 
end 
+1

Ben zeki varlık olduğunu düşündüm bir büyük karakteri burada – 0x4a6f4672

3

Geoff Lanotte eklemeye olan cevabı vardır. Sadece bu ve diğer örnekleri açıklayan hooks numaralı Cucumber viki sayfasına bir link ekleyeyim.

+0

ve başlayarak "yapmadan önce" writte olmalıdır "önce yapmak"! :) Teşekkürler! –

7

Geoff Lanotte'nin cevabına bir düzeltme. Bu sizin env.rb dosyasında kodun bu tür koyma

yerine sermaye B ile

 
Before do 
    # this code is run before each scenario 
end 

olmalıdır, ancak, size özellikler/destek veren bir yeni dosyaya koydu isteyebilirsiniz dizini bir "hooks.rb" dosyası. Bunun nedeni, salatalık raylarını yükseltirseniz env.rb dosyasının otomatik olarak yeniden üretilmesidir. Burada

fazla bilgi: https://github.com/cucumber/cucumber/wiki/Hooks