0

私は次の仕様を持っています:

describe EmailImport do
  describe "#format_x_priority" do
    specify { EmailImport.format_x_priority('5 (Lowest)').should eq(:low) }

    it "should raise an error when wrong argument is passed" do
      expect { EmailImport.format_x_priority('5 (Lowest)').to raise_error }
    end
  end
end

これは合格すべきではありませんよね?どちらも同じコードであり、1回は結果に:lowなり、1回はエラーになります。しかし、興味深いことに、両方とも合格です!私は何が間違っているのですか?

完全を期すために、ここに私のEmailImport.format_x_priority方法があります:

def self.format_x_priority(priority)
  # 1 Highest; 2 High; 3 oder "" normal; 4 low; 5 lowest
  case priority
  when "1 (Highest)"
    Priority::HIGH
  when "2 (High)"
    Priority::HIGH
  when "3 (Middle)"
    Priority::MEDIUM
  when "4 (Low)"
    Priority::LOW
  when "5 (Lowest)"
    Priority::LOW
  when ''
    Priority::MEDIUM
  else
    raise "Invalid value '#{priority}' for argument 'priority'!"
  end
end
4

2 に答える 2

2

構文エラー

構文エラーがあります。マッチャーを含む行全体をブロックで囲みます。中括弧を動かしてラムダだけを囲みます。そうすれば、軌道に戻るはずです。例えば:

it "should raise an error when wrong argument is passed" do
  expect { EmailImport.format_x_priority('5 (Lowest)') }.to raise_error
end

これが機能する理由

特定のキーワードはブロックを取るので、specify { ... }正しいです。一方、expectはラムダを取得し、それをマッチャーに渡します。それはexpect { ... }.to raise_error正しいです。

于 2012-07-17T14:57:55.857 に答える
0

解決策は細部にあります!正しいコード:

expect { EmailImport.format_x_priority('5 (Lowest)') }.to raise_error

不正なコード:

expect { EmailImport.format_x_priority('5 (Lowest)').to raise_error }
于 2012-07-17T14:38:27.960 に答える