كيفية إدراج معرفات يمكن التنبؤ بها لاختبار باستخدام أكتيفيريكورد

StackOverflow https://stackoverflow.com/questions/1079619

سؤال

وأنا أحاول القيام ببعض التجارب الخيار كما يلي:

Given I am logged in as admin
When I go to the article page
Then I should see "Edit Article"
And I should see "Article Title"

وحيث المسار إلى صفحة المادة هو "المواد / 1" أو بعض id.The مشكلة معروفة هو أنه عندما أقوم بإدخال البيانات الخاصة بي باستخدام تعريفي خطوة

Article.create(:name => "Article Title")

وأنا لا يمكن أن تعرف في وقت مبكر ما هوية ستكون عند إدخال السجل.

وأساسا، I إما الحاجة

وأ) أن يكون قادرا على إدراج هويات يمكن التنبؤ بها. لقد حاولت الطريقة المذكورة في الجواب في هذه المسألة ولكن لا توجد الآن 'ر يبدو أن العمل بالنسبة لي - دائما إدراج هوية مختلفة

أو

وب) إرسال الخطوات خيار لي في مثل هذه الطريقة التي يمكنني تمرير في معلمة لبلدي معرف المقالة

وكل الدروس الخيار رأيت نوعا من اللمعان على هذا النوع من السيناريو - انها تسير دائما إلى قائمة جميع المقالات أو أيا كان، أبدا صفحة تفاصيل محددة

وسيكون موضع تقدير أي مساعدة. شكرا!

هل كانت مفيدة؟

المحلول

وهناك طريقتان لإنشاء قيم ID يمكن التنبؤ بها. الأول هو لتعيين معرف على يدويا إنشاء:

model = Model.new(options)
model.id = DESIRED_ID
model.save

والصيد هنا هو أن الخيارات التي تم تمريرها إلى إما جديدة أو إنشاء، أو سوف update_attributes لن يؤثر على قيمة id وهذا هو السبب في الدعوة إلى model.id هي، للأسف، المطلوبة.

وبديل ذلك هو لإعادة الجدول بأكمله قبل تشغيل الاختبارات الخاصة بك. ويمكن تغيير هذا لحساب التركيبات إذا لزم الأمر. على سبيل المثال:

class Model < ActiveRecord::Base
  def self.reset!
    connection.execute("DELETE FROM #{table_name}")
    connection.execute("ALTER TABLE #{table_name} AUTO_INCREMENT=1")
  end
end

وهذا سيحدد هوية من الصف الأول المدرج، على أن يكون قابل للتنبؤ 1.

نصائح أخرى

وماذا عن الانتقال إلى صفحة المادة في الطريق فإن المستخدم نفعل ذلك؟ خطوتك

When I go to the article page

ويمكن تغييره إلى

When I go to the page for the "Article Title" article

ووتعريف خطوتك يذهب إلى لمحة عامة عن المادة، يجد صلة مع "عنوان المقال" وانتقاله إلى الصفحة بهذه الطريقة.

ويمكنك الحصول على المزيد من التغطية الاختبار، وليس لديهم ما يدعو للقلق معرفات.

وماذا عن اتخاذ "انتقل إلى صفحة المقال" الذهاب إلى "/ المواد / # {Article.first.id}"

وهذا هو ما يمكنني استخدام:

# feature
Scenario: creator archives fragment
  When fragment 1 exists
  And I am the fragment owner
  And I am on fragment 1

#steps
def create_fragment(attribs)
  force_id = attribs[:force_id]
  attribs.delete(:force_id) if force_id
  fragment = Fragment.create!({ :owner_id => @current_user.id, :originator_id => @current_user.id}.merge(attribs))
  if force_id
    fragment.id = force_id.to_i
    fragment.save!
  end
  fragment
end

When /^fragment (.*) exists$/ do |frag|
  @fragment = Fragment.find_by_id(frag)
  @fragment.destroy if @fragment
  @fragment = create_fragment(:force_id => frag.to_i,:description => "test fragment #{frag}",:narrative => "narrative for fragment #{frag}")
end


# paths.rb
when /fragment (.*)/
fragment_path($1)

والمتعة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top