1

Rspec 2 のカスタムマッチャーを宣言したい

と を使用rspec 2.13してrails 3.2.13います。

私はこのようなものを書き込もうとしました:

RSpec::Matchers.define :be_present do |expected|
  match do
    expected !be_empty
  end
end

しかし、これを仕様で使用すると機能しません

  1) NewsletterMailer.send_newsletter_to_groups from 
     Failure/Error: its(:from) { should be_present }
     ArgumentError:
       wrong number of arguments (1 for 0)

仕様コード:

describe NewsletterMailer do

  describe '.send_newsletter_to_emails' do
    let(:user) { create(:admin) }
    let(:user2) { create(:user) }
    subject { NewsletterMailer.send_newsletter_to_emails(newsletter.id, "#{user.email}, #{user2.email}") }

    its(:to) { should == [user.email, user2.email] }
    its(:from) { should be_present }
    its(:subject) { should be }
  end

編集:

私はこのような論理の逆にしたい:

its(:from) { should_not be_nil }
4

2 に答える 2

2

解決:

RSpec::Matchers.define :be_present do |expected|
  match do |actual|
    actual && actual.present?
  end
end

このヘルパーは Rspec に既に存在するようです。

ホイールを再発明しました。しかし、私はまだこの回答を許可し、この投稿を削除しません.

パラメータなしでカスタムマッチャーを宣言する方法など、開発者向けのヒントになります。

be_something_special

于 2013-05-30T16:25:39.000 に答える