Проверка параметров вызовов методов для двойного теста в RSpec - PullRequest
3 голосов
/ 10 января 2012

Можно ли проверить, соответствуют ли параметры, передаваемые параметрам вызова метода, определенным ограничениям? Я хотел бы сделать что-то вроде

my_double = double("MyObject")
my_double.should_receive(:mocked_method).with{ <something that has an attribute called name and value "john"> }

Большое спасибо заранее.

Редактировать: Я постараюсь немного уточнить, чего я хочу достичь

То, что я хочу, это проверить, что данный метод макета был назван передачей объекта, который удовлетворяет некоторым условиям

Ответы [ 3 ]

6 голосов
/ 14 февраля 2012

Для записи. То, чего я хотел достичь, можно сделать с помощью

  @test_double.should_receive(:send_mail) do |mail|
    mail.to.should eq(["john@aol.com"])
    mail.body.decoded.should include "Error"
  end

И код должен вызывать метод send_mail данного объекта с параметром, который удовлетворяет условиям, указанным в блоке.

1 голос
/ 30 июля 2016

Просто добавьте, если ваш метод принимает несколько аргументов, вы можете сделать следующее в своем блоке:

allow_any_instance_of(MyClass).to receive(:my_method) do |*args|
  expect(args[0]).to include "something"
  expect(args[1]).to match(/something_else/)
  # etc
end
0 голосов
/ 10 января 2012

На мой взгляд, это действительно должен быть отдельный тест:

context "after being passed to my_double" do
  before { my_double( XXX ) }
  subject { XXX }
  it { should respond_to :attribute }
  describe :attribute do
    subject { XXX.attribute }
    it { should == 5 }
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...