簡體   English   中英

在 Rails 控制台中執行 rspec 測試

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM