[英]Execute an rspec test in Rails Console
假設我的用戶 model 有一個 user_spec.rb,我想在 rails 控制台中運行該測試。
我的第一個想法是執行通常的 shell 命令:
exec("./spec/user_spec.rb")
但是有沒有更簡單的方法來運行規范? 我正在嘗試自動化一些測試(並且稍微重新發明輪子,是的),因此能夠在另一個 Ruby class 內部觸發 rspec 測試似乎很理想。
編輯:
output = `./spec/user_spec.rb`
這將提供 rspec output 和 $?.success? 然后將提供一個通過失敗值。 這是這里最好的解決方案嗎? 或者有沒有辦法自己調用 RSpec class ?
正如Anthony在他的評論中指出的那樣,您可以使用RSpec::Core::Runner
基本上從代碼或交互式控制台調用命令行行為。 但是,如果您使用 Rails 之類的東西,請考慮將您的環境設置為開發環境(甚至生產環境,如果您將在此處執行代碼)。 因此,請確保無論您做什么,都不會產生任何不需要的副作用。
另一件要考慮的事情是 RSpec 全局存儲其配置,包括之前向其注冊的所有示例組。 這就是您需要在后續運行之間重置 RSpec 的原因。 這可以通過RSpec.reset
來完成。
所以把它們放在一起,你會得到:
require 'rspec/core'
RSpec::Core::Runner.run(['spec/path/to_spec_1.rb', 'spec/path/to_spec_2.rb'])
RSpec.reset
對RSpec::Core::Runner.run
的調用將輸出到標准輸出並作為結果返回退出代碼( 0
表示沒有錯誤,非零退出代碼表示測試失敗)。
..
Finished in 0.01791 seconds (files took 17.25 seconds to load)
2 example, 0 failures
=> 0
您還可以將其他IO
對象傳遞給RSpec::Core::Runner.run
以指定它應該輸出到的位置。 您還可以將其他命令行參數傳遞給RSpec::Core::Runner.run
的第一個數組,例如'--format=json'
以 JSON 格式輸出結果。
因此,例如,如果您想以 JSON 格式捕獲輸出,然后對其進行進一步處理,您可以執行以下操作:
require 'rspec/core'
error_stream = StringIO.new
output_stream = StringIO.new
RSpec::Core::Runner.run(
[
'spec/path/to_spec_1.rb',
'spec/path/to_spec_2.rb',
'--format=json'
],
error_stream,
output_stream
)
RSpec.reset
errors =
if error_stream.string.present?
JSON.parse(error_stream.string)
end
results =
if output_stream.string.present?
JSON.parse(output_stream.string)
end
運行bundle exec rspec
運行所有測試或bundle exec rspec./spec/user_spec.rb
運行特定測試
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.