RSpec 2.99 和 3.0 RC1 已發布!
Myron Marston
2014 年 5 月 18 日RSpec 團隊已發布 3.0.0.rc1 和 2.99.0.rc1!除非有新的重大問題回報,否則這將是最後一個預發行版本,我們將在 2 週後發布 2.99.0 和 3.0.0 的最終版本。
如果您要從 2.x 升級專案,請查看升級說明。
如果您對 RSpec 3 的新功能感到好奇,請在幾天後回來查看 – 我很快就會發布 RSpec 3 中值得注意的完整變更清單。
感謝所有協助促成此版本發布的貢獻者!
發行說明
rspec-core 2.99.0.rc1
增強功能
- 新增
--deprecation-out
CLI 選項,將棄用警告導向到指定的檔案。(Myron Marston) - 回溯支援在 metadata 中使用
skip
來跳過範例的執行。(Xavier Shay, #1472) - 新增
Pathname
支援來設定所有輸出串流。(Aaron Kromer) - 新增
test_unit
和minitest
期望框架。(Aaron Kromer)
棄用
- 棄用
RSpec::Core::Pending::PendingDeclaredInExample
,改用SkipDeclaredInExample
。(Xavier Shay) - 當從巢狀
describe <SomeClass>
範例群組內存取described_class
時,會發出棄用警告,因為在 RSpec 3 中,described_class
將返回最內層描述的類別,而不是像 RSpec 2 中那樣返回最外層描述的類別。(Myron Marston) - 棄用
RSpec::Core::FilterManager::DEFAULT_EXCLUSIONS
、RSpec::Core::FilterManager::STANDALONE_FILTERS
以及在這些篩選器上使用#empty_without_conditional_filters?
。(Sergey Pchelincev) - 棄用
RSpec::Core::Example#options
,改用RSpec::Core::Example#metadata
。(Myron Marston) - 當將符號或雜湊傳遞給
describe
或context
作為第一個引數時,會發出警告。在 RSpec 2.x 中,這會被視為 metadata,但在 RSpec 3 中,它會被視為描述的物件。若要繼續將其視為 metadata,請在符號或雜湊之前傳遞描述。(Myron Marston) - 棄用
RSpec::Core::BaseTextFormatter::VT100_COLORS
和RSpec::Core::BaseTextFormatter::VT100_COLOR_CODES
,改用RSpec::Core::BaseTextFormatter::ConsoleCodes::VT100_CODES
和RSpec::Core::BaseTextFormatter::ConsoleCodes::VT100_CODE_VALUES
。(Jon Rowe) - 棄用
RSpec::Core::ExampleGroup.display_name
,改用RSpec::Core::ExampleGroup.description
。(Myron Marston) - 棄用
RSpec::Core::ExampleGroup.describes
,改用RSpec::Core::ExampleGroup.described_class
。(Myron Marston) - 棄用
RSpec::Core::ExampleGroup.alias_example_to
,改用RSpec::Core::Configuration#alias_example_to
。(Myron Marston) - 棄用
RSpec::Core::ExampleGroup.alias_it_behaves_like_to
,改用RSpec::Core::Configuration#alias_it_behaves_like_to
。(Myron Marston) - 棄用
RSpec::Core::ExampleGroup.focused
,改用RSpec::Core::ExampleGroup.focus
。(Myron Marston) - 為
config.filter_run :focused
新增棄用警告,因為範例別名fit
和focus
將不再包含:focused
metadata,但將繼續包含:focus
。(Myron Marston) - 棄用依
:line_number
篩選(例如,來自 CLI 的--line-number
)。改用位置篩選。(Myron Marston) - 棄用
--default_path
作為--default-path
的替代方案。(Jon Rowe) - 棄用
RSpec::Core::Configuration#warnings
,改用RSpec::Core::Configuration#warnings?
。(Myron Marston) - 棄用
share_examples_for
,改用shared_examples_for
或直接使用shared_examples
。(Myron Marston) - 棄用
RSpec::Core::CommandLine
,改用RSpec::Core::Runner
。(Myron Marston) - 棄用
#color_enabled
、#color_enabled=
和#color?
,改用#color
、#color=
和#color_enabled? output
。(Jon Rowe) - 棄用
#filename_pattern
,改用#pattern
。(Jon Rowe) - 棄用
#backtrace_cleaner
,改用#backtrace_formatter
。(Jon Rowe) - 棄用變更
RSpec::Configuration#formatters
。(Jon Rowe) - 棄用
stdlib
作為可用的期望框架,改用test_unit
和minitest
。(Aaron Kromer)
錯誤修正
- 當您設定
config.deprecation_stream
過晚而無法生效時,會發出警告,因為 reporter 已經設定好了。(Myron Marston) - 使用區塊的
skip
不應執行該區塊。(Xavier Shay)
rspec-core 3.0.0.rc1
3.0.0 的重大變更
- 變更
described_class
,使其在像describe MyClass
的巢狀群組中,返回MyClass
,而不是外層群組的描述類別。(Myron Marston) - 重構篩選器管理器,使其不再繼承 Hash,並具有更緊密、更特定領域的介面。(Sergey Pchelincev)
- 從
BaseTextFormatter
中移除舊的色彩定義。(Jon Rowe) - 從
BaseTextFormatter
中移除主控台色彩定義。(Jon Rowe) - 重組範例群組 metadata,使計算出的鍵直接暴露在 metadata 雜湊之外,而不是在巢狀的
:example_group
子雜湊中。此外,父範例群組 metadata 現在可用作[:parent_example_group]
,而不是[:example_group][:example_group]
。仍然提供通過舊鍵結構的棄用存取方式。(Myron Marston) - 移除
:describes
metadata 鍵。它無故重複了:described_class
。仍然提供通過:describes
的棄用存取方式。(Myron Marston) - 將
:example_group_block
metadata 鍵重新命名為:block
。(Myron Marston) - 移除已棄用的
RSpec::Core::Example#options
。(Myron Marston) - 將
BaseTextFormatter#colorize_summary
移至SummaryNotification#colorize_with
。(Jon Rowe) describe some_hash
在 RSpec 2.x 中將some_hash
視為 metadata,但在 RSpec 3.0 中會將其視為描述的物件。Metadata 必須始終放在描述引數之後。(Myron Marston)- 移除已棄用的
display_name
,它是ExampleGroup.description
的別名。(Myron Marston) - 移除已棄用的
describes
,它是ExampleGroup.described_class
的別名。(Myron Marston) - 移除已棄用的
RSpec::Core::ExampleGroup.alias_it_behaves_like_to
。改用RSpec::Core::Configuration#alias_it_behaves_like_to
。(Myron Marston) - 移除已棄用的
RSpec::Core::ExampleGroup.alias_example_to
。改用RSpec::Core::Configuration#alias_example_to
。(Myron Marston) - 移除
focused
範例別名,並將範例/群組別名fit
、focus
、fcontext
和fdescribe
變更為不再包含:focused => true
metadata。它們現在只包含:focus => true
metadata。這表示您需要使用filter_run :focus
來篩選它們,而不是filter_run :focused
。(Myron Marston) - 移除
--line-number
篩選。它在語義上是可疑的,因為它是一個全域篩選器(可能會應用於多個檔案),但多個檔案中的相同行號之間沒有有意義的關聯。請改用rspec path/to/spec.rb:23:46
格式,它更簡潔,並且由於其範圍限定於檔案,因此更有意義。(Myron Marston) - 移除
--default_path
作為--default-path
的別名。(Jon Rowe) - 移除已棄用的
share_examples_for
。仍然有shared_examples
和shared_examples_for
。(Myron Marston) - 將
RSpec::Core::Configuration#warnings
重新命名為RSpec::Core::Configuration#warnings?
,因為它是一個布林標誌。(Myron Marston) - 在規格執行後,RSpec 的全域狀態不再重置。這為替代執行器提供了更大的彈性,可以決定何時以及是否要重置狀態。如果替代執行器要在同一個程序中多次執行規格套件,它們現在負責呼叫此方法(或執行類似的重置)。(Sam Phippen)
- 將
RSpec::Core::CommandLine
(從未正式宣告為公開)合併到RSpec::Core::Runner
中。(Myron Marston) - 移除
color_enabled
作為color
的別名。(Jon Rowe) - 移除
backtrace_cleaner
作為backtrace_formatter
的別名。(Jon Rowe) - 移除
filename_pattern
作為pattern
的別名。(Jon Rowe) - 將舊版格式器的支援提取到
rspec-legacy_formatters
。(Jon Rowe) RSpec::Configuration#formatters
現在返回一個 dup 以防止變更。(Jon Rowe)- 將
stdlib
作為可用的期望框架,替換為test_unit
和minitest
。(Aaron Kromer) - 從
BaseTextFormatter
中移除回溯格式化輔助程式。(Jon Rowe) - 將效能分析器支援提取到
ProfileFormatter
和ProfileNotification
。如果格式器希望回應--profile
,則應實作dump_profile
。(Jon Rowe) - 將剩餘的格式器狀態提取到 reporter 和 notifications。引入
ExamplesNotification
以分享先前在BaseFormatter
中保留的關於範例的資訊。(Jon Rowe)
增強功能
- 新增
config.default_formatter
屬性,可用於設定一個只在未設定其他格式器(例如,通過--formatter
)時才使用的格式器。(Myron Marston) - 在
LegacyFormatterAdaptor
中支援舊的色彩定義。(Jon Rowe) - 將
execution_result
(由 metadata 暴露)從雜湊移至具有適當屬性的第一級物件。status
現在儲存並返回為符號,而不是字串。它保留了向後相容性的棄用雜湊行為。(Myron Marston) - 為格式器提供主控台程式碼輔助程式。(Jon Rowe)
- 對 metadata 雜湊使用原始的 Ruby 雜湊,而不是雜湊的子類別。計算的 metadata 條目現在會預先計算,而不是在第一次存取時才延遲計算。(Myron Marston)
- 將
:block
metadata 條目新增到範例 metadata,使其與範例群組 metadata 中的:block
保持一致。(Myron Marston) - 新增
fspecify
和fexample
作為specify
和example
的別名,其中包含:focus => true
metadata,以與fit
保持一致。(Myron Marston) - 新增對
colorize_summary
的舊版支援。(Jon Rowe) - 重組執行器,使其可以在替代執行器的子類別中更容易地自訂。(Ben Hoskings)
- 將
RSpec::Core::ConfigurationOptions
文件記錄為官方支援的公共 API。(Myron Marston) - 新增
--deprecation-out
CLI 選項,將棄用警告導向到指定的檔案。(Myron Marston) expect_with :stdlib
(現在可用作expect_with :minitest
) 的 Minitest 5 相容性。(Xavier Shay)- Reporter 現在通過
StartNotification
和SummaryNotification
通知格式器 RSpec 和您的規格的載入時間。(Jon Rowe) - 新增
disable_monkey_patching!
設定選項,禁用您使用的任何 RSpec 部分的所有 monkey patching。(Alexey Fedorov) - 新增
Pathname
支援來設定所有輸出串流。(Aaron Kromer) - 新增
config.define_derived_metadata
,可用於將其他 metadata 應用於符合給定篩選器的所有群組或範例。(Myron Marston) - 通過
FailedExampleNotification
提供格式化和彩色化的回溯,並在錯誤是由於您期望失敗的通過規格造成的時,傳送PendingExampleFixedNotifications
。(Jon Rowe) - 將
dump_profile
新增到格式器 API,以允許格式器實作對--profile
的支援。(Jon Rowe) - 允許通過具有 RSpec「狀態」(例如,
:success
、:failure
)的ConsoleCodes
而不是直接的色彩程式碼來對文字著色。(Jon Rowe) - 從格式器通知物件中公開
fully_formatted
方法,這使得自訂格式器可以輕鬆地產生像 rspec-core 的格式化輸出。(Myron Marston)
錯誤修正
- 修復
rspec --init
產生的spec_helper.rb
檔案,使建議的設定在執行一個檔案時正確使用文件格式器。(Myron Marston) - 修復在拆除模擬之後才產生描述的排序問題,這導致了意外的例外。(Bradley Schaefer, Aaron Kromer, Andrey Savchenko)
- 允許符號作為隱式主詞使用 (例如:
describe :foo
)。(Myron Marston) - 防止在已經處於 context 內時建立獨立的 context (即使用
RSpec.describe
)。這樣做沒有任何理由,而且可能會導致意料之外的錯誤。(Xavier Shay) - 修正共享範例群組的作用域,以便當兩個共享範例群組在不同層級的巢狀 context 中共享相同的名稱時,會使用最接近的 context 中的那個。(Myron Marston)
- 修正
--warnings
選項,使其能立即啟用警告,以便能應用於--require
載入的檔案。(Myron Marston) - 當您設定
config.deprecation_stream
過晚而無法生效時,會發出警告,因為 reporter 已經設定好了。(Myron Marston) - 將完整的
RSpec::Core::Example
介面新增至傳遞給around
hooks 的引數。(Myron Marston) - 使用篩選器執行 specs 時,行號永遠具有優先權。(Xavier Shay)
- 確保 :if 和 :unless metadata 篩選器被視為特例,且永遠生效。(Bradley Schaefer)
- 確保當 rake task 執行
rspec
時,使用目前正在執行的 RSpec 版本,即使已安裝更新的版本。(Postmodern) - 使用舊版格式化程式作為預設值不再導致無限迴圈。(Xavier Shay)
rspec-expectations 2.99.0.rc1
棄用
- 棄用 DSL 定義的自訂 matcher 上的
matcher_execution_context
屬性。(Myron Marston) - 棄用
RSpec::Matchers::Pretty#_pretty_print
。(Myron Marston) - 棄用
RSpec::Matchers::Pretty#expected_to_sentence
。(Myron Marston) - 棄用
RSpec::Matchers::Configuration
,改用RSpec::Expectations::Configuration
。(Myron Marston) - 棄用在不回應
xyz?
或xyzs?
的物件上使用be_xyz
謂詞 matcher。(Daniel Fone) - 棄用在不回應
has_xyz?
的物件上使用have_xyz
matcher。(Daniel Fone) - 棄用在具有私有方法
has_xyz?
的物件上使用have_xyz
matcher。(Jon Rowe) - 當區塊期望表達式與不透過
supports_block_expectations?
明確支援區塊期望的 matcher 一起使用時,發出棄用警告。(Myron Marston) - 棄用
require 'rspec-expectations'
。請改用require 'rspec/expectations'
。(Myron Marston)
rspec-expectations 3.0.0.rc1
3.0.0 的重大變更
- 從 DSL 定義的自訂 matcher 中移除
matcher_execution_context
屬性。(Myron Marston) - 移除
RSpec::Matchers::Pretty#_pretty_print
。(Myron Marston) - 移除
RSpec::Matchers::Pretty#expected_to_sentence
。(Myron Marston) - 將
RSpec::Matchers::Configuration
常數重新命名為RSpec::Expectations::Configuration
。(Myron Marston) - 防止
have_xyz
謂詞 matcher 使用私有方法。(Adrian Gonzalez) - 區塊 matcher 現在必須實作
supports_block_expectations?
。(Myron Marston) - 停止支援
require 'rspec-expectations'
。請改用require 'rspec/expectations'
。(Myron Marston)
錯誤修正
- 修正當
YARD
在測試環境中載入時,由 beta2 觸發的NoMethodError
。(Myron Marston) - 修正
be_xyz
matcher 以接受do...end
區塊。(Myron Marston) - 修正可組合 matcher 失敗訊息產生邏輯,使其在給定
$stdout
或$stderr
時不會崩潰。(Myron Marston) - 修正
change
matcher 以便能正確地與IO
物件一起運作。(Myron Marston) - 修正
exist
matcher,使其可以在組合的 matcher 表達式中使用,其中涉及未實作exist?
或exists?
的物件。(Daniel Fone) - 修正可組合 matcher 比對邏輯,使其在使用 matcher 之前複製它們,以便能正確地與使用基於給定
actual
值的內部記憶的 matcher 一起運作。(Myron Marston) - 修正
be_xyz
和has_xyz
謂詞 matcher,使其可以在組合的 matcher 表達式中使用,其中涉及未實作謂詞方法的物件。(Daniel Fone)
增強功能
- 記錄剩餘的公開 API。rspec-expectations 現在已記錄 100% 的公開 API,並將保持這種狀態 (因為未記錄的新方法會導致建置失敗)。(Myron Marston)
- 改善
eq
matcher 失敗訊息中 BigDecimal 物件的格式。(Daniel Fone) - 改善
be_xyz
謂詞 matcher 的失敗訊息,使其包含接收者的inspect
輸出。(Erik Michaels-Ober, Sam Phippen) - 新增
all
matcher,讓您指定給定的 matcher 比對集合中的所有元素:expect([1, 3, 5]).to all( be_odd )
。(Adam Farhi) - 為複合運算子 (
and
/or
) 新增布林別名 (&
/|
)。(Adam Farhi) - 當使用者在區塊期望表達式中錯誤地使用值 matcher (例如:
expect { 3 }.to eq(3)
) 或反之亦然時,給予使用者明確的錯誤訊息。(Myron Marston)
rspec-mocks 2.99.0.rc1
棄用
- 棄用
RSpec::Mocks::TestDouble.extend_onto
。(Myron Marston) - 棄用
RSpec::Mocks::ConstantStubber
。(Jon Rowe) - 棄用未選擇加入的
Marshal.dump
monkey-patch。(Xavier Shay)
rspec-mocks 3.0.0.rc1
3.0.0 的重大變更
- 移除
RSpec::Mocks::TestDouble.extend_onto
。(Myron Marston) - 移除
RSpec::Mocks::ConstantStubber
。(Jon Rowe) - 讓 monkey-patch of Marshal 支援傾印 stub 物件為選擇加入。(Xavier Shay)
增強功能
- 現在,當清除 frozen 物件上的 stub 方法時,不再崩潰,而是發出警告說明無法清除 stub。(Justin Coyne 和 Sam Phippen)
- 為
anything
、duck_type
和instance_of
引數 matcher 新增有意義的描述。(Jon Rowe)
錯誤修正
- 修復 3.0.0.beta2 中引入的迴歸,該迴歸導致
double.as_null_object.to_str
回傳 double 而不是字串。(Myron Marston) - 修復
expect(dbl).to receive_message_chain(:foo, :bar)
中的錯誤,其中它未設定鏈中最後一個訊息的期望。(Jonathan del Strother) - 允許驗證 partial doubles 以 stub 私有方法。(Xavier Shay)
- 修復在 Class 物件上允許/期望訊息的錯誤,這些物件的單例類別已預先附加。(Jon Rowe)
- 修復 1.8.7 未在 partial doubles 上執行實作區塊的問題。(Maurício Linhares)
- 透過提供我們自己的 inspect 輸出,防止在 stub
any_instance
方法時發生StackLevelTooDeep
錯誤,該方法在inspect
中存取。(Jon Rowe) - 修復
any_instance
邏輯中的錯誤,如果已設定verify_partial_doubles
,則不允許您 mock 或 stub 私有方法。(Oren Dobzinski) - 當嘗試觀察 any instance 上未實作的方法時,包含有用的錯誤訊息。(Xavier Shay)
- 修正
and_call_original
,使其在繼承階層中的多個類別已使用相同方法 stub 時能正常運作。(Myron Marston) - 修正
any_instance
,使其能更新已經 stub 的現有 instance。(Myron Marston) - 修正 verified doubles,使其類別名稱包含在失敗訊息中。(Myron Marston)
- 修正
expect_any_instance_of
,使其在直接 stub 的個別 instance 上接收到訊息時,仍然滿足期望。(Sam Phippen, Myron Marston) - 明確禁止使用
any_instance
來 mock 或 stub 在預先附加到類別的模組上定義的方法。這之前會觸發SystemStackError
,而且非常難以支援,因此我們目前不支援它。(Myron Marston)
rspec-rails 2.99.0.rc1
棄用
- 棄用
stub_model
和mock_model
,改用rspec-activemodel-mocks
gem。(Thomas Holmes) - 發出棄用,指示使用者在升級過程中設定
config.infer_spec_type_from_file_location!
,因為在 3.0 中 spec 類型推斷是選擇加入的。(Jon Rowe) - 當在控制器範例群組中存取
described_class
時發出棄用,該範例群組已使用controller { }
巨集來產生匿名控制器類別,因為在 2.x 中,described_class
會回傳該產生的類別,但在 3.0 中,它會繼續回傳傳遞給describe
的類別。(Myron Marston)
rspec-rails 3.0.0.rc1
3.0.0 的重大變更
- 將
mock_model
和stub_model
方法提取到rspec-activemodel-mocks
gem。(Thomas Holmes) - Spec 類型不再由位置推斷,而是需要明確標記。舊的行為由
config.infer_spec_type_from_file_location!
啟用,該設定仍然在預設產生的spec_helper.rb
中提供。(Xavier Shay, Myron Marston) - 控制器規格中的
controller
巨集不再改變:described_class
metadata。它仍然會覆寫 subject 並設定控制器。(Myron Marston) - 停止依賴或要求
rspec-collection_matchers
。想要這些 matcher 的使用者應該將 gem 新增至他們的 Gemfile 並自行要求它。(Myron Marston) - 移除對
ActiveModel
的執行階段相依性。(Rodrigo Rosenfeld Rosas)
增強功能
- 支援 Rails 4.x 參考屬性 IDs 在為視圖規格產生的 scaffold 中。(Giovanni Cappellotto)
- 新增
have_http_status
matcher。(Aaron Kromer) - 將 spec 類型 metadata 新增至產生器樣板。(Aaron Kromer)
錯誤修正
- 修正控制器產生的 scaffold 規格中的不一致性。(Andy Waite)
- 確保
config.before(:all, :type => <type>)
hooks 在給定類型的群組之前執行,即使該類型是由檔案位置推斷出來的。(Jon Rowe, Myron Marston) - 切換到使用
Rack::Utils::parse_nested_query
來解析參數,以符合 Rails。(Tim Watson) - 修正匿名控制器路由的不正確命名空間。(Aaron Kromer)