メインコンテンツまでスキップ

構文の設定

rspec-expectations が提供する主要な構文は、オブジェクトやコードブロックを明示的にラップして、それに期待を設定する expect メソッドに基づいています。

また、古い should ベースの構文もありますが、これはシステム内のすべてのオブジェクトに should がモンキーパッチされていることを前提としています。ただし、この構文は時々予期しない失敗を引き起こすことがあります。なぜなら、RSpec はシステム内のすべてのオブジェクトを所有しているわけではなく、常に一貫して動作することを保証することができないからです。

should 構文を明示的に有効にしない限り、expect 構文を使用することをおすすめします。私たちは should 構文を完全に削除する予定はありませんが、RSpec 3 以降では、明示的に有効にしない場合に非推奨の警告が表示され、RSpec 4 ではデフォルトで無効になる予定です(外部の gem に移動する可能性もあります)。

もしも古い should ベースのプロジェクトを expect にアップグレードしたい場合は、transpec をチェックしてみてください。これは自動的に変換を行うことができます。

背景

以下の内容で "spec/syntaxes_spec.rb" という名前のファイルがあるとします。

require 'spec_helper'

RSpec.describe "using the should syntax" do
specify { 3.should eq(3) }
specify { 3.should_not eq(4) }
specify { lambda { raise "boom" }.should raise_error("boom") }
specify { lambda { }.should_not raise_error }
end

RSpec.describe "using the expect syntax" do
specify { expect(3).to eq(3) }
specify { expect(3).not_to eq(4) }
specify { expect { raise "boom" }.to raise_error("boom") }
specify { expect { }.not_to raise_error }
end

両方の構文はデフォルトで利用可能です

以下の内容で "spec/spec_helper.rb" という名前のファイルがあるとします。


_When_ I run `rspec`

_Then_ the examples should all pass

_And_ the output should contain "Using `should` from rspec-expectations' old `:should` syntax without explicitly enabling the syntax is deprecated".

## Disable should syntax

_Given_ a file named "spec/spec_helper.rb" with:

```ruby
RSpec.configure do |config|
config.expect_with :rspec do |expectations|
expectations.syntax = :expect
end
end

_When_ I run `rspec`

_Then_ the output should contain all of these:

| 8 examples, 4 failures |
| undefined method `should' |

## Disable expect syntax

_Given_ a file named "spec/spec_helper.rb" with:

```ruby
RSpec.configure do |config|
config.expect_with :rspec do |expectations|
expectations.syntax = :should
end
config.mock_with :rspec do |mocks|
mocks.syntax = :should
end
end

_When_ I run `rspec`

_Then_ the output should contain all of these:

| 8 examples, 4 failures |
| undefined method `expect' |

## Explicitly enable both syntaxes

_Given_ a file named "spec/spec_helper.rb" with:

```ruby
RSpec.configure do |config|
config.expect_with :rspec do |expectations|
expectations.syntax = [:should, :expect]
end
end

rspec を実行すると、

すべての例がパスするはずです。

また、出力には "deprecated" という文字列が含まれていないはずです。