установка ожидания для пользовательского экземпляра в интеграционном тесте с мокко и капибарой - PullRequest
0 голосов
/ 26 июля 2011

Поэтому я пытаюсь убедиться, что при сохранении происходит обратный вызов ... Мой тест:

user = create_user
login user

visit new_post_path
fill_in "post_title", :with => "my post"

user.expects(:publish_post!).once
click_button "post_submit"

и я получаю:

1) Отказ: test: пост должен размещать пост. (Послетестовый) [тест / интеграция / post_test.rb: 72: в __bind_1311708168_640179' /test/test_helper.rb:37:in ожидание_ на ' тест / интеграция / post_test.rb: 70: в `__bind_1311708168_640179 ']: не все ожидания оправдались неудовлетворенные ожидания: - ожидается ровно один раз, еще не вызвано: # .publish_post! (any_parameters) оправданные ожидания: - разрешено любое количество раз, еще не вызвано: Post (id: целое число, title: string, method_of_exchange: строка, you_tube_url: строка, lat: десятичное число, lng: десятичное число, bounty: целое число, расстояние: integer, user_id: целое число, рассмотреть_схожие_фференты : логическое, описание: текст, create_at: datetime, updated_at: datetime, адрес: строка, город: строка, состояние: строка, zip: строка, страна: строка, county: строка, category_id: целое число, slug: строка, статус: строка , популярность: целое число, дельта: логическое значение, share_count: целое число, needs_reply: десятичное число, needs_offer: десятичное число, район: строка) .facets (any_parameters) - разрешено любое количество раз, еще не вызвано: {} .for (any_parameters) - ожидается никогда, еще не вызвано: # .publish_post! (any_parameters)

Тем не менее, моя модель сообщения:

class Post < ActiveRecord::Base
  belongs_to :user
  after_create :publish

  def publish
    user.publish_post!
  end
end

и действие создания моего контроллера сообщений действительно назначает пользователю сообщение ...

class PostsController < ApplicationController
  def create
    post = Post.new(params[:post])
    post.user = current_user
    post.save
  end
end

...

Функциональность отлично работает при тестировании вручную .. Так что я не понимаю, почему это не работает при автоматизации?

1 Ответ

2 голосов
/ 27 июля 2011

Я бы не стал использовать насмешливые ожидания в интеграционном тесте.Этот вид тестирования относится к низкоуровневым модульным тестам для самого класса Post.Старайтесь думать об интеграционных тестах, как о взгляде на систему снаружи, как о пользователе.Какой эффект имеет обратный вызов?Можете ли вы просто проверить результат этого эффекта?

...