2010-06-18 37 views
1

我如何重構以消除該規範的代碼重複:BDD/TDD與JSpec - 刪除重複代碼

describe 'TestPlugins' 
    describe '.MovieScanner(document)' 
     before_each 
      MoviePage_loggedIn = fixture("movie_logged_in.html")    // Get logged-in movie page 
      MoviePage_notloggedIn = fixture("movie_not_logged_in.html")  // Get non logged-in movie page 
      scanner = new MovieScanner()            // Get movie scanner 
     end 

     it 'should scan logged-in movie page for movie data' 
      doc = MoviePage_loggedIn   // Get document to scan 

      // Unit Tests 
      // ------------------------------------------------------------ 

      // Test movie scanner's functions 
      scanner.getMovieTitle(doc).should.eql "The Jacket" 
      scanner.getMovieYear(doc).should.eql "2005" 

      // Test movie scanner's main scan function 
      scannedData = scanner.scan(doc) 
      scannedData.title.should.eql "The Jacket" 
      scannedData.year.should.eql "2005" 
     end 

     it 'should scan non logged-in movie page for movie data' 
      doc = MoviePage_notloggedIn  // Get document to scan 

      // Unit Tests 
      // ------------------------------------------------------------ 

      // Test movie scanner's functions 
      scanner.getMovieTitle(doc).should.eql "The Jacket" 
      scanner.getMovieYear(doc).should.eql "2005" 

      // Test movie scanner's main scan function 
      scannedData = scanner.scan(doc) 
      scannedData.title.should.eql "The Jacket" 
      scannedData.year.should.eql "2005" 
     end 
    end 
end 

回答

0

在BDD,我們想描述我們的應用程序或類的行爲,使他們很容易改變。如果消除重複也會掩蓋行爲,請不要刪除重複。代碼被讀取的次數比寫入的要多10倍,IME甚至更多地用於BDD場景和單元級示例。

如果你決定無論如何去除重複,與可讀性的東西取代它。我不熟悉JSpec但是我希望像

scannedData.shouldMatch "The Jacket", "2005" 

,所有的冠軍和年度的相關結果進行檢查。

要刪除重複無關你是否登錄與否:

獨立的代碼轉換成吉文斯(背景下的地方不要緊,你如何到達那裏),Whens(通過應用程序事件,其行爲實際上你想要測試)和Thens(你正在尋找的結果)。你要找來描述系統和事物,用戶可以用它做什麼,而不是它是否是一個網頁或窗口的功能 - 它不應該的問題。將較低級別的調用放在較低級別。

然後,您可以有兩個不同的吉文斯 - 登錄或未登錄 - 和重用,其餘的其他步驟。

+0

謝謝您的回答!我的意思,我怎麼結合的登錄和非登錄的頁面均測試,使得相同的測試代碼不跨越測試複製? – Chetan 2010-06-24 19:33:35

+0

已編輯。希望能幫助到你! – Lunivore 2010-06-28 11:20:35