2011-10-05 22 views
0

我遇到了需要驗證一些正則表達式的情況。從rails應用程序代碼運行rspec

所以,我的應用程序運行過程中,我可能要測試一個特定的正則表達式:

  1. 不包含空格
  2. 只包含捕獲組特定數量的
  3. 不使用某些字符
  4. 只包含一定數量的通配符

rspec似乎是做這件事的完美工具秒。然而,我意識到它通常用於在運行應用程序之前測試應用程序接口,假設和邏輯。但是,與自動報告輸出相結合的自然語法將很好。

問題: 這是rspec的適當使用嗎?

如何從正在運行的應用程序中調用描述?

或者,我是否應該放棄這種方法,並簡單地在我的課程中編寫方法來執行驗證?

回答

1

以這種方式使用rspec是非常沮喪和不尋常的。您應該將測試代碼留在您的Gemfile中的測試組中,而不是在您的應用中引用它。

相反,使用rails驗證您的字段與正則表達式格式匹配,然後在rspec中編寫測試來驗證您的驗證。

+0

感謝您的反饋意見。關於這種情況有趣的是數據不會被保存。目標是從文件讀取數據,驗證數據,然後丟棄它。這項建議仍然存在嗎? – wadesworld

+0

@wadesworld - 如果數據無效會發生什麼? –

+0

是的,它依然存在。我不會爲你的測試使用1個正則表達式,我會使用驗證的組合 - 對我的口味來說,正則表達式最終會變得太複雜,以致於在將來不可讀。 –

0

這絕對是新事物:在rails中使用rspec進行驗證。但是對於特定的問題,人們往往會建議使用DSL,因此rspec是一種DSL,它可能完全適合您的工作。

所以如果是這樣的話:爲什麼不,是的,繼續前進。發揮創造力,找到新的方法來使用你擁有的工具。

只是一個小小的警告:從你標記的幾個點來看,複雜度似乎不是太大,所以確保你沒有使用火箭筒來殺死蒼蠅。 Rspec是一個強大而強大的工具,綁定在rspec中以在rails過程中運行可能不是完全簡單。

0

如果您想要生成報告,可以在(:all){puts「report goes here」}之後或之後使用全局報告(:each)。如果您希望某些數據爆炸您的測試,您可以測試.should raise_exception。我想你會寫很多異常處理,以防止輸出中的預期故障。將結果記錄到數據庫或文件可能也很煩人。如果可以的話,描述你對數據進行的測試,然後在最後解析rspec的輸出。

class Car 
    attr_accessor :doors 
end 

describe "Car" do 

    it "should have doors" do 
    Car.new.should respond_to(:doors) 
    fail("failing intentionally") 
    end 

    it "should pass this easily" do 
    Car.new should_not be nil 
    end 

    after(:all) { puts "report here" } 
end 

您可以在下面看到我對測試失敗的描述。

$ rspec rspec_fail.rb 
F.report here 

Failures: 

    1) Car should have doors 
    Failure/Error: fail("failing intentionally") 
    RuntimeError: 
     failing intentionally 
    # ./rspec_fail.rb:9:in `block (2 levels) in <top (required)>' 

Finished in 0.00052 seconds 
2 examples, 1 failure 

如果這是測試文本和正則表達式,我會很容易就做出失敗的報告。 Failure/Error: fail("Data has spaces")

相關問題