LINUX.ORG.RU

Помогите с контроллером

 ,


0

1
  def create
    @url = encode_url(params[:url])
    uri = URI(@url)

    @host = Host.find_by_address(normalize_domain(uri.host))
    @resource = @host.resources.new(path: get_full_path(uri), csspaths: params[:csspaths], period: params[:period])

    if @resource.save
      redirect_to '/settings/resources', notice: 'Resource was saved.'
    else
      render :new
    end
  end

Хочу для начала проверить просто @host.

  let(:host) { mock_model(Host).as_null_object }

  before do
    Host.stub(:find).and_return(host)
  end

  it "should find @host" do
    Host.should_receive(:find_by_address).and_return(host)

    post :create, url: "opennet.ru"
  end

Тест валится на попытке вызвать внешнюю функцию. Немного попытался написать для ней stub-ов, но нифига.

ResourcesController#create should find @host
     Failure/Error: post :create, url: "opennet.ru"
     NoMethodError:
       undefined method `sub' for nil:NilClass
     # ./app/controllers/application_controller.rb:22:in `normalize_domain'
     # ./app/controllers/resources_controller.rb:17:in `create'
     # ./spec/controllers/resources_controller_spec.rb:40:in `block (3 levels) in <top (required)>'
☆

А если сделать без моков, а с реальными объектами, ошибка проявляется?

# ./app/controllers/application_controller.rb:22:in `normalize_domain'

Покажи эту функцию. То место, где вызывается sub.

Deleted
()
Ответ на: комментарий от Deleted

Должно работать с моками. Так сказано в документации. У меня всё отлажено, я просто учусь писать тесты.

В той функции sub не вызывается. Функция работает как часы. В ней вызывается URI(хостнейм), валится всё из-за того, что хостенйма нет.

Моя проблема в том, что я передаю с post параметры, но они не обрабатываются как это происходит в контроллере. Как можно увидеть в коде, Host-у нужно передать uri в качестве параметра, но uri у меня просто нет - вместо него nil.

Простоты для скажу что все вызываемые внешние функции возвращают строки. Не суть важно что одни делают, важно что они тестами просто не вызываются.

daris ☆
() автор топика
Вы не можете добавлять комментарии в эту тему: топик перемещен в архив.