1

Ruby 1.9.3、Padrino 0.10.7、rspec 2.11.0、capybara 2.0.2 でセットアップしている capybara と rspec で奇妙なことが起こっています。

基本的な Padrino プロジェクトでは、「/」ページをロードするのに十分なだけでなく、haml と rspec をセットアップしました (カスタム コードはまだありません!) (これは、以下の仕様内で「page.content を配置する」ことで期待どおりにレンダリングされることを確認しました)。簡単なスペックはこちら。「偽物」は存在しませんが、「ホーム」は存在します...コンソールに置くと、予想される真/偽は正しいですが、何らかの理由で、マッチャーが真/偽を正しく認識していないことに注意してください。

私がこれまでに持っている 1 つの手がかりは、Proc が期待されていることを報告している should have_content('Bogus') を使用した 2 番目の仕様にあります...

./spec/controllers/hello_world_spec.rb

require 'spec_helper'

require 'capybara'
require 'capybara/rspec'

describe 'The HelloWorld App', :type => :feature do

  context "per documentation" do 
    it "has bogus content" do
      visit '/'
      page.has_content?('Bogus')
    end

    it "does not have bogus content" do
      visit '/'
      page.should have_content("Bogus")
    end
  end

  context "should tests" do 
    it "has bogus content" do
      visit '/'
      page.has_content?('Bogus').should == true
    end

    it "does not have bogus content" do
      visit '/'
      page.has_content?('Bogus').should == false
    end
  end

  context "variables" do 
    it "has bogus content" do
      visit '/'
      result = page.has_content?('Bogus')
      puts result
      result.should == true
    end

    it "has Home content (expect TRUE!)" do
      visit '/'
      result = page.has_content?('Home')
      puts result
      result.should == true
    end

    it "does not have bogus content" do
      visit '/'
      result = page.has_content?('Bogus')
      puts result
      result.should == false
    end
  end
end

spec_helper.rb

PADRINO_ENV = 'test' unless defined?(PADRINO_ENV)
require File.expand_path(File.dirname(__FILE__) + "/../config/boot")

def app
  ##
  # You can handle all padrino applications using instead:
  Padrino.application
  # Askme.tap do |app|
  # end
end

RSpec.configure do |conf|
  conf.include Rack::Test::Methods
  Capybara.app = app
end

出力:

11:40:57:website >> bundle exec rspec spec/app/controllers/hello_world_controller_spec.rb 
WARNING: Nokogiri was built against LibXML version 2.8.0, but has dynamically loaded 2.7.8

The HelloWorld App
  per documentation
    has bogus content
    does not have bogus content (FAILED - 1)
  should tests
    has bogus content
    does not have bogus content
  variables
false
    has bogus content
true
    has Home content (expect TRUE!)
false
    does not have bogus content

Failures:

  1) The HelloWorld App per documentation does not have bogus content
     Failure/Error: page.should have_content("Bogus")
     TypeError:
       wrong argument type Capybara::RSpecMatchers::HaveText (expected Proc)
     # ./spec/app/controllers/hello_world_controller_spec.rb:16:in `block (3 levels) in <top (required)>'

Finished in 1.66 seconds
7 examples, 1 failure

Failed examples:

rspec ./spec/app/controllers/hello_world_controller_spec.rb:14 # The HelloWorld App per documentation does not have bogus content
4

1 に答える 1

0

犯人は、Gemfile に「bacon」と「rspec」の両方を持っていたことが判明しました。Capybara はテスト スイートにベーコンを使用するプロジェクトに導入され、試行された例は rspec でした。バンドルされた gem からベーコンが削除されると、ドキュメントごとにカピバラの仕様が実行されました。

ベーコン スクリプトは多かれ少なかれ rspec の下でそのまま実行されるため、プロジェクトの決定は、ベーコンを削除してテスト スイートの rspec を使用し、ベーコン スクリプトにマイナーな調整を加えてすべての仕様を rspec の下で実行することです。

于 2013-01-14T17:41:26.413 に答える