rspec: Как заблокировать метод экземпляра, названный конструктором?

Разобрался.

Я настраивал информационное окно в getInfoContents вместо getInfoWindow.

getInfoContents даст вам белый ящик по умолчанию. Если вы хотите пользовательский, как я, вам нужно будет сделать все в getInfoWindow примерно так:

     mMap.setInfoWindowAdapter(object : GoogleMap.InfoWindowAdapter {
        override fun getInfoWindow(marker: Marker?): View {
            val row: View = layoutInflater.inflate(R.layout.custom_info_window, null)
            val tvAddress: TextView = row.findViewById(R.id.textView_iw_address)
            val tvTime: TextView = row.findViewById(R.id.textView_iw_time)

            tvAddress.text = marker?.title
            tvTime.text = marker?.snippet

            return row            }

        override fun getInfoContents(marker: Marker?): View? {
            //put in here, if you just want the default info window
            return null
        }
    })
31
задан Pedro 25 November 2008 в 03:46
поделиться

7 ответов

Вот фиксация, которая добавляет опцию к rspec - Это было 25 мая 2008. С этим можно сделать

A.any_instance.stub(do_something: 23)

Однако, последняя версия драгоценного камня rspec (1.1.11, октябрь 2008) не имеет этого патча в ней.

Этот билет указывает, что они дергали его по причинам обслуживания, и альтернативное решение еще не было предоставлено.

не похож на Вас, может сделать это в этой точке. Необходимо будет взломать класс вручную с помощью alias_method или somesuch.

22
ответ дан 27 November 2019 в 22:10
поделиться

или с RR:

stub.any_instance_of(A).do_something { 23 }
5
ответ дан 27 November 2019 в 22:10
поделиться

Я не знаю, как сделать это в ложной платформе спецификации, но можно легко выгрузить ее, чтобы мокко сделало следующее:

# should probably be in spec/spec_helper.rb
Spec::Runner.configure do |config|
  config.mock_with :mocha
end

describe A, " when initialized" do
  it "should set x to 42" do
    A.new.x.should == 42
  end
end

describe A, " when do_something is mocked" do
  it "should set x to 23" do
    A.any_instance.expects(:do_something).returns(23)
    A.new.x.should == 23
  end
end
11
ответ дан 27 November 2019 в 22:10
поделиться

В моей версии rspec (1.2.2) я могу сделать следующее:

A.should_receive(:new).and_return(42)

Я знаю, что, вероятно, уже слишком поздно отвечать на исходный постер, но я все равно отвечаю на него для дальнейшего использования , поскольку я пришел сюда с тем же вопросом, но выяснил, что он работает с последней версией rspec.

-1
ответ дан 27 November 2019 в 22:10
поделиться

Чтобы заглушить метод экземпляра, вы можете сделать что-то вроде этого:

before :each do
  @my_stub = stub("A")
  @my_stub.should_receive(:do_something).with(no_args()).and_return(42)
  @my_stub.should_receive(:do_something_else).with(any_args()).and_return(true)
  A.stub(:new).and_return(my_stub)
end

Но, как указал псхнейдер, просто верните 42 по новому с помощью: A.stub (: new) .and_return (42) или что-то в этом роде.

0
ответ дан 27 November 2019 в 22:10
поделиться

Я нашел это решение на http://pivotallabs.com/introducing-rr/

new_method = A.method(:new)

A.stub!(:new).and_return do |*args|
  a = new_method.call(*args)
  a.should_receive(:do_something).and_return(23)
  a
end
16
ответ дан 27 November 2019 в 22:10
поделиться

Мне нравится ответ Дениса Барушева. И я хотел бы предложить только один косметическое изменение, которое делает переменную new_method ненужной. n заглушенных методов, чтобы к ним можно было получить доступ с префиксом proxied_by_rspec __ :


A.stub!(:new).and_return do |*args|
  a = A.proxied_by_rspec__new(*args)
  a.should_receive(:do_something).and_return(23)
  a
end
2
ответ дан 27 November 2019 в 22:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: