คำถามติดแท็ก rspec

RSpec เป็นเฟรมเวิร์กการพัฒนาที่ขับเคลื่อนด้วยพฤติกรรม (BDD) สำหรับภาษาโปรแกรม Ruby ซึ่งได้รับแรงบันดาลใจจาก JBehave มันมีเฟรมเวิร์กการเยาะเย้ยแบบบูรณาการโดยอิงจาก JMock กรอบงานถือได้ว่าเป็นภาษาเฉพาะโดเมน (DSL) และคล้ายกับข้อกำหนดภาษาธรรมชาติ

16
ข้ามการโทรกลับใน Factory Girl และ Rspec
ฉันกำลังทดสอบโมเดลด้วยการโทรกลับหลังสร้างที่ฉันต้องการเรียกใช้ในบางครั้งเท่านั้นในขณะทดสอบ ฉันจะข้าม / เรียกใช้การโทรกลับจากโรงงานได้อย่างไร class User < ActiveRecord::Base after_create :run_something ... end โรงงาน: FactoryGirl.define do factory :user do first_name "Luiz" last_name "Branco" ... # skip callback factory :with_run_something do # run callback end end

4
การทดสอบตัวควบคุม RSpec - การตอบสนองที่ว่างเปล่าร่างกาย
ฉันติดปัญหาเมื่อทดสอบคอนโทรลเลอร์ด้วย RSpec - response.body call ส่งคืนสตริงว่างเสมอ ในเบราว์เซอร์ทุกอย่างแสดงผลอย่างถูกต้องและการทดสอบคุณสมบัติแตงกวาดูเหมือนจะทำให้ถูกต้อง แต่ RSpec ก็ล้มเหลวทุกครั้ง ความคาดหวังอื่น ๆ เกี่ยวกับวัตถุตอบสนองเช่นการresponse.should render_template('index')ส่งผ่านโดยไม่มีปัญหาใด ๆ คุณเคยพบปัญหานี้มาก่อนหรือไม่? บางที html ตอบกลับสามารถหาได้ด้วยวิธีอื่น? สำหรับเวอร์ชัน Rails 2.1.0, RSpec 1.2.7

1
rspec 3 - ทำลายเมธอดคลาส
ฉันกำลังอัปเกรดจาก rspec 2.99 เป็น rspec 3.0.3 และได้แปลงวิธีการใช้อินสแตนซ์allow_any_instance_ofแล้ว แต่ยังไม่ได้หาวิธีที่จะทำให้เมธอดคลาสแตก ฉันมีรหัสดังนี้: module MyMod class Utils def self.find_x(myarg) # Stuff end end end และการทดสอบ rspec 2 ของฉันทำสิ่งนี้: MyMod::Utils.stub(:find_x).and_return({something: 'testing'}) Rspec 3 คืออะไรในการทำสิ่งนี้?

9
Capybara Ambiguity Resolution
ฉันจะแก้ไขความคลุมเครือใน Capybara ได้อย่างไร ด้วยเหตุผลบางประการฉันต้องการลิงก์ที่มีค่าเดียวกันในเพจ แต่ไม่สามารถสร้างการทดสอบได้เนื่องจากได้รับข้อผิดพลาด Failure/Error: click_link("#tag1") Capybara::Ambiguous: Ambiguous match, found 2 elements matching link "#tag1" สาเหตุที่เลี่ยงเรื่องนี้ไม่ได้เพราะการออกแบบ ฉันพยายามสร้างหน้าทวิตเตอร์ขึ้นมาใหม่โดยมีทวีต / แท็กทางด้านขวาและแท็กทางด้านซ้ายของหน้า ดังนั้นจึงหลีกเลี่ยงไม่ได้ที่หน้าลิงก์ที่เหมือนกันจะปรากฏในหน้าเดียวกัน

6
วิธีรับ rspec-2 เพื่อให้การติดตามทั้งหมดที่เกี่ยวข้องกับความล้มเหลวในการทดสอบ
ตอนนี้ถ้าฉันเรียกใช้ชุดทดสอบโดยใช้ไฟล์ rake specฉันได้รับข้อผิดพลาด: 1) SegmentController GET 'index' ควรใช้งานได้ ความล้มเหลว / ข้อผิดพลาด: รับ 'ดัชนี' วิธีการที่ไม่ได้กำหนด `` locale 'สำหรับ # # ./spec/controllers/se segment_controller_spec.rb:14: ใน `` บล็อก (3 ระดับ) ใน ' นี่เป็นเรื่องปกติเนื่องจากฉันมีข้อผิดพลาด :) ปัญหาคือการติดตามไม่เป็นประโยชน์มากนัก ฉันรู้ว่ามันพังในsegments_controller_spec.rbบรรทัดที่ 14 แต่นี่คือที่ที่ฉันเรียกการทดสอบ: ### segments_controller_spec.rb:14 get 'index' ฉันต้องการให้มีการแตกบรรทัดจริงและการติดตามทั้งหมดไม่ใช่ส่วนในโฟลเดอร์ข้อมูลจำเพาะ วิ่งไปด้วย--traceไม่ช่วยอะไร

9
เร่งการทดสอบ RSpec ในแอปพลิเคชัน Rails ขนาดใหญ่
ฉันมีแอปพลิเคชัน Rails ที่มีตัวอย่างมากกว่า 2,000 ตัวอย่างในการทดสอบ RSpec ของฉัน ไม่จำเป็นต้องพูดว่ามันเป็นแอปพลิเคชั่นขนาดใหญ่และมีอะไรให้ทดสอบมากมาย การเรียกใช้การทดสอบเหล่านี้ ณ จุดนี้ไม่มีประสิทธิภาพมากและเนื่องจากใช้เวลานานมากเราจึงเกือบจะหมดกำลังใจที่จะเขียนก่อนที่จะผลักดันงานสร้างใหม่ ฉันเพิ่ม - profile ใน spec.opts ของฉันเพื่อค้นหาตัวอย่างที่ทำงานได้ยาวนานที่สุดและมีอย่างน้อย 10 ตัวที่ใช้เวลาโดยเฉลี่ย 10 วินาทีในการรัน เป็นเรื่องปกติในหมู่ผู้เชี่ยวชาญ RSpec หรือไม่? 10 วินาทีนานเกินไปสำหรับตัวอย่างเดียวหรือไม่ ฉันตระหนักดีว่าด้วยตัวอย่าง 2,000 ตัวอย่างการทดสอบทุกอย่างอย่างละเอียดจะต้องใช้เวลาไม่น้อย แต่ ณ จุดนี้ 4 ชั่วโมงเป็นเรื่องที่น่าหัวเราะเล็กน้อย คุณเห็นช่วงเวลาแบบใดสำหรับตัวอย่างที่ทำงานยาวนานที่สุด ฉันจะทำอย่างไรเพื่อแก้ปัญหาข้อกำหนดที่มีอยู่เพื่อหาปัญหาคอขวดและช่วยเร่งความเร็ว ทุกนาทีจะช่วยในจุดนี้ได้จริงๆ

4
RSpec: ความแตกต่างระหว่าง let และ a before block คืออะไร?
อะไรคือความแตกต่างระหว่างletและbeforeบล็อกใน RSpec? และควรใช้เมื่อใด? แนวทางที่ดีจะเป็นอย่างไร (let หรือ before) ในตัวอย่างด้านล่างนี้? let(:user) { User.make !} let(:account) {user.account.make!} before(:each) do @user = User.make! @account = @user.account.make! end ฉันศึกษาโพสต์ stackoverflowนี้ แต่เป็นการดีหรือไม่ที่จะกำหนด let สำหรับการเชื่อมโยงเช่นด้านบน

5
วิธีการที่ไม่ได้กำหนด `` เยี่ยมชม 'เมื่อใช้ RSpec และ Capybara ในราง
ฉันไม่สามารถให้ capybara ทำงานกับ rspec ได้ มันทำให้ฉันมีข้อผิดพลาดนี้: undefined method `visit' for #<RSpec::Core::ExampleGroup::Nested_1:0x16529f8 @example=nil> ฉันรู้ว่ามีโพสต์มากมายเกี่ยวกับเรื่องนี้ แต่ไม่มีวิธีแก้ปัญหาใดที่ใช้ได้ผลสำหรับฉัน ส่วนใหญ่เกี่ยวข้องกับสเปคที่ไม่อยู่ใน / spec / คุณสมบัติ - ที่ของฉันอยู่ ก่อนอื่นข้อผิดพลาด: $bundle exec rspec spec F Failures: 1) security signs users in Failure/Error: visit "/sessions/new" NoMethodError: undefined method `visit' for #<RSpec::Core::ExampleGroup::Nested_1:0x16529f8 @example=nil> # ./spec/features/security_spec.rb:4:in `(root)' Finished in 0.006 seconds …

2
spec / rail_helper.rb ต่างจาก spec / spec_helper.rb อย่างไร? ฉันต้องการหรือไม่
ฉันกำลังทำ Rails Tutorial เป็นครั้งที่สอง เมื่อใส่เข้าไปแล้ว rails generate integration_test static_pages ฉันได้รับspec/rails_helper.rbและspec/spec_helper.rbแทนที่จะเป็นเพียงspec/spec_helper.rb ตอนนี้เมื่อฉันทำการทดสอบพวกมันจะยาวกว่า ("verbose" มากขึ้น) และช้ากว่าครั้งที่แล้ว ฉันสงสัยว่าความแตกต่างระหว่างสองไฟล์คืออะไรและฉันทำอะไรผิดพลาด นอกจากนี้ยังมีวิธีกำจัดrails_helper.rbไฟล์โดยไม่ทำให้ทุกอย่างยุ่งเหยิง?

5
วิธีตั้งค่าโรงงานใน FactoryGirl ด้วย has_many สมาคม
ใครช่วยบอกหน่อยได้ไหมว่าฉันแค่ตั้งค่าผิดวิธี ฉันมีโมเดลต่อไปนี้ที่มี has_many ผ่านการเชื่อมโยง: class Listing < ActiveRecord::Base attr_accessible ... has_many :listing_features has_many :features, :through => :listing_features validates_presence_of ... ... end class Feature < ActiveRecord::Base attr_accessible ... validates_presence_of ... validates_uniqueness_of ... has_many :listing_features has_many :listings, :through => :listing_features end class ListingFeature < ActiveRecord::Base attr_accessible :feature_id, :listing_id belongs_to :feature belongs_to :listing …

4
Capybara: ฉันจะกรอกข้อมูลในช่องป้อนข้อมูลด้วย ID ได้อย่างไร
ฉันมีสิ่งนี้: <input class="string optional" id="course_group_courses_attributes_2_name" name="course_group[courses_attributes][2][name]" placeholder="Lengua" size="15" type="text" /> </div> ฉันจะกรอกข้อมูลในฟิลด์นั้นด้วย ID ได้อย่างไร?
88 rspec  capybara 

6
Rails 4: จะรีเซ็ตฐานข้อมูลทดสอบได้อย่างไร?
ฉันใช้ Rails 4 และสังเกตเห็นว่าการทดสอบ RSpec ของฉันล้มเหลวเนื่องจากการปรับโครงสร้างการทดสอบบางส่วนของฉันใช้ตัวกรองก่อน (น่าจะเป็นเพราะการทำธุรกรรม) โพสต์นี้อธิบายถึงปัญหาที่คล้ายกัน: ฐานข้อมูลทดสอบรางไม่ล้างหลังจากการทำงานบางครั้ง แทนการใช้อัญมณี DatabaseCleaner มีคำสั่ง rake เพื่อล้างฐานข้อมูลทดสอบหรือไม่? ฉันเชื่อว่าrake db:test:prepareเลิกใช้แล้วใน Rails 4 นอกจากนี้หากก่อนทำธุรกรรมเช่น post :create, user: Fabricate.attributes_for(:user) ยังคงอยู่ มีวิธีอื่นในการปรับโครงสร้างใหม่เพื่อหลีกเลี่ยงความจำเป็นในการล้างฐานข้อมูลทดสอบด้วยตนเองหรือไม่?

7
Rspec ไม่เห็นรุ่น Class ของฉัน ข้อผิดพลาดคงที่ที่ไม่ได้เริ่มต้น
ฉันกำลังเขียนการทดสอบเกี่ยวกับ Rspec สำหรับโมเดลของฉันในแอปพลิเคชัน Ruby on Rails และฉันได้รับข้อผิดพลาดนี้ขณะเริ่ม 'rspec spec' command: /spec/models/client_spec.rb:4:in `<top (required)>': uninitialized constant Client (NameError) ฉันใช้ Rails 4.0.0 และ Ruby 2.0.0 นี่คือ client_spec.rb ของฉัน: require 'spec_helper' describe Client do it 'is invalid without first_name', :focus => true do client = Client.new client.should_not be_valid end end และ Gemfile: source …

6
จะยืนยันจำนวนองค์ประกอบโดยใช้ Capybara ด้วยข้อความแสดงข้อผิดพลาดที่เหมาะสมได้อย่างไร
ฉันรู้ว่าใน Capybara คุณสามารถทำสิ่งนี้ได้: page.should have_css("ol li", :count => 2) อย่างไรก็ตามหากสมมติว่าหน้านั้นมีองค์ประกอบที่ตรงกันเพียงรายการเดียวข้อผิดพลาดนี้ไม่สามารถอธิบายได้มากนัก: 1) initial page load shows greetings Failure/Error: page.should have_css("ol li", :count => 2) expected css "ol li" to return something แทนที่จะเป็นข้อความแสดงข้อผิดพลาดที่ค่อนข้างคลุมเครือนี้มีวิธีการเขียนการยืนยันในลักษณะที่ผลลัพธ์ของข้อผิดพลาดจะเป็นเช่น 'เมื่อจับคู่' ol li ', คาดว่า: 2, พบ: 1' เห็นได้ชัดว่าฉันสามารถสร้างตรรกะที่กำหนดเองสำหรับพฤติกรรมดังกล่าวได้ - ฉันกำลังถามว่ามีวิธีทำ 'นอกกรอบ' หรือไม่? สำหรับสิ่งที่คุ้มค่าฉันใช้ Selenium driver และ RSpec
87 rspec  dsl  capybara 


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.