Капибара не находит текст, который на самом деле там! - PullRequest
1 голос
/ 27 июля 2011

В моем реальном проекте я использую следующие гемы для тестирования:

  • капибара из git: //github.com/jnicklas/capybara.git в редакции 6641fddcfc337a3ddaa84ac59272e884090332c3
  • rails3.1.0.rc5) (и его требования)
  • factory_girl (2.0.1)
  • factory_girl_rails (1.1.0)
  • rspec (2.6.0)
  • rspec-core (2.6.4)
  • rspec-rails (2.6.1)

При выполнении rake spec я получаю следующую ошибку:

...F.....*................*....*.*.*.

Pending:
  <pending snipped out>

Failures:

  1) Articles GET /articles/:id should show the article when clicking it
     Failure/Error: page.should have_content a.body
       expected there to be content "Dieser Artikel ist nur zum testen, erfüllt keinen Sinn und langweilig ist mir ohnehin. Das sollte nur mal so gesagt werden... MfG Euer Admin!\n" in "Stars3\n  \n    Stars!Artikel - 1 - This is an article created just for testing purpose\n  \n  \n    Artikel\n\n    \nDieser Artikel ist nur zum testen, erfüllt keinen Sinn und langweilig ist mir ohnehin. Das sollte nur mal so gesagt werden... MfG Euer Admin!\n\n  \n"              
     # ./spec/requests/articles_spec.rb:46

Finished in 1.96 seconds
37 examples, 1 failure, 5 pending

Failed examples:

rspec ./spec/requests/articles_spec.rb:40 # Articles GET /articles/:id should show the article when clicking it

Я не вижу каких-либо различий между ожиданием и результатом ... Можете ли вы указать мне правильное направление, чтобы заставить это работать?

Спецификация:

describe "GET /articles/:id" do
  it "should show the article when clicking it", :type => :request do      
    a = Factory.create(:article)#, :user => u)
    a.save
    visit articles_path
    click_link a.title
    page.should have_content a.title
    page.should have_content a.body
  end
end

Фабрика:

Factory.define :article do |a|
  Factory.sequence :title do |i|
    "#{1} - This is an article created just for testing purpose"
  end

  a.title { Factory.next(:title) }
  a.association :user, :factory => :user #user  { User.first }
  a.body <<eot
Dieser Artikel ist nur zum testen, erfüllt keinen Sinn und langweilig ist mir ohnehin. Das sollte nur mal so gesagt werden... MfG Euer Admin!
eot

end

Вид:

<% title "Artikel - #{@article.title}" -%>

<%= @article.compiled -%>

Контроллер:

class ArticlesController < ApplicationController
  before_filter :login_required, :except => [:index, :show]

  def show
    @article = Article.find_by_title(params[:id])
  end

end

И модель:

class Article < ActiveRecord::Base
  validates_presence_of :body, :message => "Es muss schon Text drin stehen"
  validates_presence_of :title, :message => "Du brauchst nen Titel für den Artikel"
  validates_presence_of :user, :message => "Das hätte nicht passieren dürfen... Es wurde kein Nutzer angegeben"
  belongs_to :user
#  before_save :compile_body

  def compiled
    body
  end

  def to_param
    "#{title}"
  end

end

Есличего-то не хватает, пожалуйста, не стесняйтесь спрашивать, я поставлю это здесь.

1 Ответ

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

Установка тела статьи на простой вкладыш, изменив фабрику на

Factory.define :article do |a|
  Factory.sequence :title do |i|
    "#{1} - This is an article created just for testing purpose"
  end

  a.title { Factory.next(:title) }
  a.association :user, :factory => :user
  a.body { "Dieser Artikel ist ein Test" }

end

прошел тест.

...