Capybara找不到实际存在的文本!

时间:2011-07-27 16:35:56

标签: rspec2 capybara ruby-on-rails-3.1 factory-bot rspec-rails

在我的实际项目中,我使用以下宝石进行测试:

  • capybara from git://github.com/jnicklas/capybara.git in revision 6641fddcfc337a3ddaa84ac59272e884090332c3
  • rails(3.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 个答案:

答案 0 :(得分:1)

通过将工厂更改为

,将文章正文设置为简单的oneliner
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

测试是否通过。