2014-01-06 2 views
1

우리는 CSV 파일의 이점을 얻기 위해 CSV를 Cucumber에 통합하려고 노력하고 있습니다. 그러나 온라인에서 연구 할 때는이 기능에 대한 공식 문서가없고 "Import scenario outline 'examples' from CSV?"만 있습니다.오이에서 CSV를 테스트 데이터로 가져 오시겠습니까?

아직 결론이 나오지 않을지 확실하지 않습니다. 현재 오이에서 CSV를 사용하는 기본 제공 방법이 있습니까?

현재 CSV를 가져 오는 기본 제공 방법이 없으며 고유 한 구문 분석 방법을 작성해야합니다. 제 질문은 단계 정의에서 어떻게 정의에 변수를 연결합니까? 대본? steps.rb에서

Scenario: do something 
    Given I eat number as <number> cucumbers 
    and the cucumber is produced at date as <date> 
    When the cucumber is expired 
    Then I should have diarrhea 

data.csv

number,date 
1,2012-01-01 
1,2012-11-03 

, 내가 할 경우 : 예를 들어

CSV.foreach("path/to/data.csv") do |row| 
    ... 

어떻게 수에 row.number`row.date`를지도로 \ feature 파일의 \ date?

답변

3

오이에서 예제 기능을 사용하려면 기능의 유지 관리 성과 가독성을 저하시키는 중요한 메타 프로그래밍을해야한다고 생각합니다. 아마과 같이 또 다른 단계 정의에 당신에게 현재의 단계를 포장하여이를 수행 할 것 :

Scenario: do something 
    Given I load some data 
    Then expired cucumbers should give me diarrhea 

을하고 단계 정의

Then 'I load some data' do 
    @data = [] 
    CSV.foreach("path/to/data.csv", headers: true) do |row| 
    @data << row 
    end 
end 

Then 'expired cucumbers should give me diarrhea' do 
    @data.each do |row| 
    step %Q|I eat number as #{row[:number]} cucumbers| 
    step %Q|the cucumber is produced at date as #{row[:date]}| 
    step %Q|the cucumber is expired| 
    setp %Q|I should have diarrhea| 
    end 
end 

이 유일한 문제를 정의하는 하나의 시나리오가 실패 할 경우 그, 어느 것이 실패하고 있는지 알아내는 추가 디버깅 단계가 필요할 수 있습니다. 후드 아래에서 이러한 단계가 더 많거나 적게 실행됩니다. 당신은 단계 정의에서 STDOUT에 행을 인쇄하여 아주 쉽게 할 수 있습니다 : 당신이 행이 당신에게 문제를주고있는 어떤 표시를 제공한다

Then 'expired cucumbers should give me diarrhea' do 
    @data.each do |row| 
    puts "row", row.inspect 
    step %Q|I eat number as #{row[:number]} cucumbers| 
    step %Q|the cucumber is produced at date as #{row[:date]}| 
    step %Q|the cucumber is expired| 
    setp %Q|I should have diarrhea| 
    end 
end 

합니다.

Erata : 데이터 시트를 기능과 별도로 유지 관리하여 프로젝트 관리자와 같은 사람이 엣지 케이스를 만들어 코드의 동작에 맞춰 실행할 수 있기를 바랍니다. 그러나 나는 github에서이 기능을 편집하고 CI가이 접근법을 사용하기보다는 예제 테이블에 추가 한 예제를 실행할 수 있도록 할 수있는 기꺼이 할 것입니다. 두 경우 모두 아마도 회귀에는 좋지만 코드를 개발하는 데는 정말 고통 스럽습니다. 이 유형의 테스트는 일종의 http://fitnesse.org/이며 그 아이디어는 여러분에게 영감을 줄 수 있습니다.

관련 문제