Перемешивание модели без поддержки базы данных в Rails с помощью Rspec - PullRequest
0 голосов
/ 30 мая 2011

Я пытаюсь создать модель, отличную от ActiveRecord, в своем приложении Ruby on Rails в соответствии с http://railscasts.com/episodes/121-non-active-record-model. Однако я испытываю трудности с ее тестированием.

В моем файле app/models/sms.rb есть следующий класс.

class Sms
  def initialize
    # Do stuff here
  end

  def deliver
    # Do some stuff here
  end
end

Я не могу смоделировать метод доставки в своем классе Sms.

it 'should do someting' do
  @sms = mock(Sms)
  @sms.should_receive(:deliver).and_return(true)

  post :create, :user_id => @user.id
  flash[:notice].should == "SMS sent successfully."
  response.should redirect_to(some_url)
end

В коде моего контроллера у меня есть строка с надписью @sms.deliver. Все же выше дает следующую ошибку:

   Failure/Error: @sms.should_receive(:deliver).and_return(true)
      (Mock Sms).deliver(any args)
      expected: 1 time
      received: 0 times

Есть указатели?

Ответы [ 2 ]

2 голосов
/ 30 мая 2011

Если в вашей версии RSpec нет метода any_instance, вам нужно указать :new в классе:

@sms = mock(Sms)
Sms.stub(:new).and_return(@sms)
@sms.should_receive(:deliver).and_return(true)
2 голосов
/ 30 мая 2011

Переменные, начинающиеся с @, являются переменными экземпляра. @Sms, на которые ссылается ваш контроллер, не совпадает с @sms, как определено в вашей спецификации.

Попробуйте изменить

@sms = mock(Sms)
@sms.should_receive(:deliver).and_return(true)

до

Sms.any_instance.should_receive(:deliver).and_return(true)
...