ความคาดหวัง Rspec ในแตงกวา: วิธีการที่ไม่ได้กำหนด 'เป็น' เมื่อใช้ภายในชั้นเรียน

ฉันใช้ความคาดหวัง rspec ในกรอบงานแตงกวาและดูดีเมื่อใช้ในระดับการกำหนดขั้นตอน

ฉันได้กำหนดค่าไฟล์ env.rb ด้วย:

require 'rspec/expectations'
World(RSpec::Matchers)

ปัญหาที่ฉันสังเกตเห็นตอนนี้คือหากฉันพยายามใช้ rspec ภายในวิธีการของอ็อบเจ็กต์ที่ใช้ในขั้นตอนใดขั้นตอนหนึ่ง แสดงว่าฉันล้มเหลว

E.g.
Steps_definition.rb
   service.use_rspec

class Service
   def use_rspec
       header = page.find("div#services h2").text
       header.should (be 'TV')
   end
 end

Error after execution:
 undefined method `be' for #<Service:0x2592570> (NoMethodError)

มีความคิดใดบ้างที่ปัญหาอาจเกิดขึ้นได้?

ฉันได้ลองยืนยันที่คล้ายกันกับ Capybara.page.find(...).should have_content('...') ภายในคลาสนั้นและ 'have_content' ไม่ได้รับการยอมรับเช่นกัน ดังนั้นจึงไม่แน่ใจจริงๆ ว่าเกิดอะไรขึ้น :S

ขอบคุณมากสำหรับเคล็ดลับใด ๆ !


person mickael    schedule 15.12.2012    source แหล่งที่มา
comment
บางทีคุณอาจต้องการ World(RSpec::Expectations) ?   -  person rogerdpack    schedule 21.10.2016


คำตอบ (1)


คลาสบริการของคุณไม่ได้อยู่ในโลก ดังนั้น RSpec::Matchers จึงไม่พร้อมใช้งานที่นั่น

คุณมีสองความเป็นไปได้:

  1. รวม RSpec::Matchers เข้ากับคลาสนี้ด้วยตนเอง
  2. ใส่คลาสนี้ (หรือโมดูล) ลงใน World หลังจากนั้นวิธีการต่างๆ จะพร้อมใช้งานโดยตรงในคำจำกัดความขั้นตอน

เขียน:

class Helpers
  def method
    # Capybara and RSpec::Matchers are available here
  end
end
World{Helpers.new}

or

module Helpers
  def method
    # Capybara and RSpec::Matchers are available here
  end
 end
World(Helpers)
person Andrei Botalov    schedule 15.12.2012
comment
สวัสดีอันเดรย์ ไม่แน่ใจว่าปัญหาของฉันอยู่ที่ไหน ฉันได้สร้างโมดูลที่ฉันใส่ไว้ในโลกที่ฉันได้สร้างวัตถุบริการ ดังนั้นวิธีการบริการจึงมีอยู่ในขั้นตอน ซึ่งก็ใช้ได้ ปัญหาที่ฉันมี (แม้จะลองทำตามคำแนะนำข้างต้นแล้ว) ก็คือ #Capybara และ Rspec::Matchers ดูเหมือนจะไม่ได้รับการยอมรับภายในชั้นเรียน ถ้าฉันลอง: include RSpec::Matchers ภายในชั้นเรียน ฉันจะได้รับ ข้อผิดพลาดต่อไปนี้ undefined method new' สำหรับ RSpec::Matchers::Pretty:Module เกิดข้อผิดพลาดในการสร้างตัวจัดรูปแบบ: สวย (NoMethodError)` - person mickael; 15.12.2012
comment
@mickael มันใช้งานได้สำหรับฉัน พยายามเริ่มต้นใหม่ Capybara และ RSpec::Matchers มีอยู่ในโมดูลหรือคลาสหากถูกนำไปใช้กับ World - person Andrei Botalov; 15.12.2012