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

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

6
RSpec vs Cucumber (เรื่อง RSpec) [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้มีแนวโน้มที่จะเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา เมื่อใดที่ฉันควรใช้ specs สำหรับแอปพลิเคชั่น Rails และเมื่อ Cucumber (อดีต rspec-Stories) ฉันรู้ว่าทั้งสองทำงานและใช้สเปคอย่างแน่นอน แต่มันก็ยังรู้สึกแปลก ๆ ที่จะใช้แตงกวา มุมมองปัจจุบันของฉันเกี่ยวกับเรื่องนี้คือมันสะดวกในการใช้แตงกวาเมื่อคุณใช้แอปพลิเคชันสำหรับลูกค้าและไม่เข้าใจว่าระบบทั้งหมดควรจะทำงานอย่างไร แต่ถ้าฉันทำโครงการของตัวเองล่ะ ตลอดเวลาฉันรู้ว่าส่วนต่าง ๆ ของระบบมีการโต้ตอบอย่างไร สิ่งที่ฉันต้องทำก็คือเขียนหน่วยการทดสอบจำนวนมาก สถานการณ์ที่เป็นไปได้เมื่อฉันต้องการแตงกวาคืออะไร? และเป็นคำถามที่สองที่สอดคล้องกัน: ฉันต้องเขียนรายละเอียดถ้าฉันเขียนเรื่องแตงกวา? จะไม่เป็นการทดสอบสองครั้งในสิ่งเดียวกันหรือไม่

8
การทดสอบ Ruby ทั้งหมดเพิ่ม: วิธีการที่ไม่ได้กำหนดʻauthenticate 'สำหรับ nil: NilClass
การทดสอบส่วนใหญ่ของฉันมีดังต่อไปนี้และฉันไม่เข้าใจว่าทำไม การเรียกวิธีการทั้งหมดทำให้เกิดข้อผิดพลาด 'รับรองความถูกต้อง' ฉันได้ตรวจสอบโค้ดแล้วหากมีวิธีที่เรียกว่า "พิสูจน์ตัวตน" แต่ไม่มีวิธีการดังกล่าว 1) Admin::CommentsController handling GET to index is successful Failure/Error: get :index undefined method `authenticate!' for nil:NilClass # ./spec/controllers/admin/comments_controller_spec.rb:9:in `block (3 levels) in <top (required)>' 124) PostsController handling GET for a single post should render show template Failure/Error: get :show, :year => '2008', :month => …

10
วิธีการตั้งค่าส่วนหัวของคำขอใน rspec request spec?
ในข้อมูลจำเพาะคอนโทรลเลอร์ฉันสามารถตั้งค่า http accept header ได้ดังนี้: request.accept = "application/json" แต่ในข้อกำหนดคำขอออบเจ็กต์ "request" เป็นศูนย์ แล้วฉันจะมาทำที่นี่ได้อย่างไร? เหตุผลที่ฉันต้องการตั้งค่า http accept header เป็น json คือฉันสามารถทำได้: get '/my/path' แทนสิ่งนี้ get '/my/path.json'

13
จะตรวจสอบช่องทำเครื่องหมายใน Capybara ได้อย่างไร?
ฉันใช้ Rspec และ Capybara ฉันจะเขียนขั้นตอนในการตรวจสอบได้checkboxอย่างไร? ฉันพยายามcheckตามค่า แต่ไม่พบcheckboxไฟล์. ฉันไม่แน่ใจว่าต้องทำอย่างไรเนื่องจากฉันมี ID เดียวกันและมีค่าต่างกัน นี่คือรหัส: <input id="cityID" type="checkbox" style="text-align: center; opacity: 0;" value="61" name="cityID"> <input id="cityID" type="checkbox" style="text-align: center; opacity: 0;" value="62" name="cityID"> <input id="cityID" type="checkbox" style="text-align: center; opacity: 0;" value="63" name="cityID">

7
จะคลิกลิงค์แรกในรายการไอเทมหลังจากอัพเกรดเป็น Capybara 2.0 ได้อย่างไร
วิธีคลิกลิงค์แรกในกรณีนั้น: <div class="item"> <a href="/agree/">Agree</a> </div> <div class="item"> <a href="/agree/">Agree</a> </div> within ".item" do first(:link, "Agree").click end และฉันได้รับข้อผิดพลาดนี้: Capybara::Ambiguous: Ambiguous match, found 2 elements matching css ".item" และหากไม่มีwithinฉันได้รับข้อผิดพลาดนี้: Failure/Error: first(:link, "Agree").click NoMethodError: undefined method `click' for nil:NilClass
125 ruby  rspec  capybara 

10
Rspec, Rails: จะทดสอบวิธีส่วนตัวของคอนโทรลเลอร์ได้อย่างไร?
ฉันมีตัวควบคุม: class AccountController < ApplicationController def index end private def current_account @current_account ||= current_user.account end end จะทดสอบ private method current_accountด้วย rspec ได้อย่างไร? ปล. ฉันใช้ Rspec2 และ Ruby บน Rails 3

1
วิธีค้นหาว่าการทดสอบ rspec ใดใช้เวลานานมาก
การทดสอบหนึ่ง (หรือสองรายการ) ของเราใช้เวลาตลอดไปและเราต้องการเพิ่มประสิทธิภาพให้ดีที่สุด เราได้กล่าวว่าการทดสอบ 1,000 ครั้งดังนั้นฉันจึงไม่สามารถดำเนินการเรียกใช้แต่ละไฟล์ได้ มีวิธีง่ายๆในการค้นหาคนที่ช้าหรือไม่? นี่คือ rspec 1.3
119 rspec 

7
มีปัญหาในการเปรียบเทียบเวลากับ RSpec
ฉันใช้ Ruby บน Rails 4 และ rspec-rail gem 2.14 สำหรับอ็อบเจ็กต์ของฉันฉันต้องการเปรียบเทียบเวลาปัจจุบันกับupdated_atแอ็ตทริบิวต์อ็อบเจ็กต์หลังจากรันแอ็คชันคอนโทรลเลอร์ แต่ฉันมีปัญหาเนื่องจากข้อมูลจำเพาะไม่ผ่าน นั่นคือกำหนดต่อไปนี้เป็นรหัสข้อมูลจำเพาะ: it "updates updated_at attribute" do Timecop.freeze patch :update @article.reload expect(@article.updated_at).to eq(Time.now) end เมื่อฉันเรียกใช้ข้อมูลจำเพาะข้างต้นฉันได้รับข้อผิดพลาดต่อไปนี้: Failure/Error: expect(@article.updated_at).to eq(Time.now) expected: 2013-12-05 14:42:20 UTC got: Thu, 05 Dec 2013 08:42:20 CST -06:00 (compared using ==) ฉันจะทำ spec ให้ผ่านได้อย่างไร? หมายเหตุ : ฉันลองทำสิ่งต่อไปนี้แล้วด้วย (สังเกตการutcเพิ่มเติม): …

1
RSpec กับ Cucumber ต่างกันอย่างไร? [ปิด]
ตามที่กล่าวไว้ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบถาม & ตอบของเรา เราคาดหวังว่าคำตอบจะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจก่อให้เกิดการถกเถียงโต้แย้งการสำรวจความคิดเห็นหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงได้และอาจเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อรับคำแนะนำ ปิดให้บริการใน8 ปีที่ผ่านมา ฉันมีประสบการณ์ในการพัฒนา Rails 6 เดือน ฉันได้สร้างเว็บแอปพลิเคชันที่ใช้งานอยู่ในขณะนี้ด้วยการตรวจสอบสิทธิ์และการอนุญาตและ postgresql db ฉันกำลังจะไปยังแอปพลิเคชั่น Rails ที่สอง แต่คราวนี้หลังจากเรียนรู้บทเรียนแล้วฉันต้องการพัฒนาโดยใช้ TDD เนื่องจากฉันสังเกตเห็นว่ามันง่ายกว่ามากในการปรับขนาดและแก้ไขข้อบกพร่อง พัฒนาช้า แต่ในระยะยาวจัดการได้ง่ายกว่ามาก ฉันเคยได้ยิน Rspec และ Cucumber แต่พวกเขาสับสนอย่างมาก ฉันอยากทราบว่า RSpec กับ Cucumber ต่างกันอย่างไรและใช้ทำอะไร นอกจากนี้ยังจะเป็นประโยชน์หากทราบว่าจากมุมมองของผู้เริ่มต้น (ซึ่งเป็นผู้พัฒนาเพียงคนเดียว) ว่าจำเป็นต้องใช้กรอบการทดสอบจริงหรือไม่

1
RSpec: อะไรคือความแตกต่างระหว่างคุณสมบัติและข้อกำหนดคำขอ?
เป็นความแตกต่างทางความคิดระหว่าง rspec อะไรรายละเอียดคุณลักษณะและรายละเอียดคำขอ ? จากเอกสารข้อมูลจำเพาะคุณลักษณะ: คุณลักษณะเฉพาะคือการทดสอบระดับสูงที่มีไว้เพื่อใช้ประโยชน์จากฟังก์ชันการทำงานผ่านแอปพลิเคชัน ควรขับเคลื่อนแอปพลิเคชันผ่านทางอินเทอร์เฟซภายนอกเท่านั้นโดยปกติจะเป็นหน้าเว็บ และสำหรับรายละเอียดการร้องขอ: ข้อกำหนดการร้องขอมีกระดาษห่อบาง ๆ สำหรับการทดสอบการรวม Rails และได้รับการออกแบบมาเพื่อขับเคลื่อนพฤติกรรมผ่านสแต็กเต็มรูปแบบรวมถึงการกำหนดเส้นทาง (จัดทำโดย Rails) และไม่มีการขีดข่วน (ขึ้นอยู่กับคุณ) ด้วยข้อกำหนดคำขอคุณสามารถ: ระบุคำขอเดียว ระบุคำขอหลายรายการในตัวควบคุมหลายตัว ระบุคำขอหลายรายการในหลายเซสชัน ฉันรู้ว่าข้อกำหนดคุณสมบัติใช้Capybaraและขอข้อกำหนดไม่ได้ แต่นั่นแทบจะไม่เข้ากับแนวคิดที่แตกต่างกัน

4
วิธีพูด“ should_receive” ให้มากขึ้นหลาย ๆ ครั้งใน RSpec
ฉันมีสิ่งนี้ในการทดสอบของฉัน Project.should_receive(:find).with(@project).and_return(@project) แต่เมื่อวัตถุได้รับการเรียกใช้เมธอดนั้นสองครั้งฉันต้องทำ Project.should_receive(:find).with(@project).and_return(@project) Project.should_receive(:find).with(@project).and_return(@project) มีวิธีใดบ้างที่จะพูดเช่น Project.should_receive(:find).with(@project).and_return(@project).times(2)


4
RSpec: จะทดสอบได้อย่างไรว่ามีการเรียกเมธอดหรือไม่?
เมื่อเขียนการทดสอบ RSpec ฉันพบว่าตัวเองเขียนโค้ดจำนวนมากที่มีลักษณะเช่นนี้เพื่อให้แน่ใจว่ามีการเรียกวิธีการในระหว่างการดำเนินการทดสอบ (เพื่อประโยชน์ในการโต้แย้งสมมติว่าฉันไม่สามารถซักถามสถานะได้จริงๆ ของวัตถุหลังจากการโทรเนื่องจากการดำเนินการที่วิธีการดำเนินการไม่ใช่เรื่องง่ายที่จะเห็นผลของ) describe "#foo" it "should call 'bar' with appropriate arguments" do called_bar = false subject.stub(:bar).with("an argument I want") { called_bar = true } subject.foo expect(called_bar).to be_true end end สิ่งที่ฉันอยากรู้คือ: มีไวยากรณ์ที่ดีกว่านี้หรือไม่? ฉันคิดถึง RSpec สุดเจ๋งที่จะลดโค้ดด้านบนลงเหลือสองสามบรรทัดหรือไม่? should_receiveดูเหมือนว่าควรทำเช่นนี้ แต่อ่านเพิ่มเติมดูเหมือนว่าจะไม่ตรงกับสิ่งที่ทำ

3
วิธีทดสอบข้อกังวลใน Rails
เนื่องจากฉันมีPersonableข้อกังวลในแอปพลิเคชัน Rails 4 ของฉันซึ่งมีไฟล์full_nameวิธีการฉันจะทดสอบสิ่งนี้โดยใช้ RSpec ได้อย่างไร ข้อกังวล / personable.rb module Personable extend ActiveSupport::Concern def full_name "#{first_name} #{last_name}" end end

7
ปิดใช้งานกลุ่มการทดสอบใน rspec หรือไม่
ฉันมีข้อมูลจำเพาะการทดสอบซึ่งdescribesคลาสและภายในนั้นมีหลากหลายcontextsแต่ละitบล็อกที่แตกต่างกัน มีวิธีปิดการใช้งานcontextชั่วคราวหรือไม่? ฉันลองเพิ่มการpending "temporarily disabled"โทรที่ด้านบนสุดภายในcontextฉันต้องการปิดใช้งานและฉันเห็นบางอย่างเกี่ยวกับการรอดำเนินการเมื่อฉันเรียกใช้ข้อมูลจำเพาะ แต่จากนั้นก็ยังคงเรียกใช้การทดสอบที่เหลือต่อไป นี่คือสิ่งที่ฉันมี: describe Something context "some tests" do it "should blah" do true end end context "some other tests" do pending "temporarily disabled" it "should do something destructive" do blah end end end แต่อย่างที่ฉันบอกว่ามันแค่ทำการทดสอบต่อไปภายใต้การโทรที่รอดำเนินการ การค้นหาทำให้ฉันไปยังเธรดรายชื่ออีเมลนี้ซึ่งผู้สร้าง (?) ของ rspec บอกว่าเป็นไปได้ใน rspec 2 ซึ่งฉันกำลังใช้งานอยู่ ฉันเดาว่ามันใช้งานได้ แต่ไม่มีผลตามที่ต้องการในการปิดใช้งานการทดสอบทั้งหมดต่อไปนี้ซึ่งเป็นสิ่งที่ฉันคิดเมื่อฉันเห็นการpendingโทร มีทางเลือกอื่นหรือว่าฉันทำผิด?
104 ruby  rspec 

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