سؤال

لذلك ، أحاول تعلم إطار اختبار RSPEC BDD في سياق مشروع القضبان. المشكلة التي أواجهها هي أنه لا يمكنني ، على مدى حياتي ، الحصول على تركيباتي لتحميلها بشكل صحيح في أوصاف RSPEC.

إخلاء المسئولية: نعم ، هناك أشياء أفضل من التركيبات التي يجب استخدامها. أحاول أن أتعلم شيئًا واحدًا في وقت واحد ، هنا (على وجه التحديد RSPEC) قبل أن ألعب مع أدوات مرتبطة مثل الفتيات المصنع ، Mocha ، اختبار تلقائي ، إلخ. ، إذا كان clunky ، يعمل على العمل.

على أي حال ، إليك الرمز:

/test/fixtures/users.yml -

# password: "secret"
foo:
  username: foo
  email: foo@example.com
  password_hash: 3488f5f7efecab14b91eb96169e5e1ee518a569f
  password_salt: bef65e058905c379436d80d1a32e7374b139e7b0

bar:
  username: bar
  email: bar@example.com
  password_hash: 3488f5f7efecab14b91eb96169e5e1ee518a569f
  password_salt: bef65e058905c379436d80d1a32e7374b139e7b0

/spec/controllers/pages_controller_spec.rb -

require 'spec/spec_helper'

describe PagesController do
  integrate_views
  fixtures :users
  it "should render index template on index call when logged in" do
    session[:user_id] = user(:foo).id
    get 'index' 
    response.should render_template('index')
  end
end

وما أحصل عليه عندما أقوم بتشغيل "Rake Spec" هو:

NoMethodError in 'PagesController should render index template on index call when logged in'
undefined method `user' for #<Spec::Rails::Example::ControllerExampleGroup::Subclass_1:0x2405a7c>
/Library/Ruby/Gems/1.8/gems/actionpack-2.3.5/lib/action_controller/test_process.rb:511:in `method_missing'
./spec/controllers/pages_controller_spec.rb:7:

أي أنه لا يتعرف على "المستخدم (: FOO)" كطريقة صالحة.

يجب أن تكون التركيبات نفسها على ما يرام ، لأنه عندما أقوم بتحميلها في Development DB عبر 'Rake DB: التركيبات: التحميل' ، يمكنني التحقق من أن Foo and Bar موجودون في هذا db.

أشعر أنني أفتقد شيئًا واضحًا هنا ، لكنني كنت أمزق شعري طوال اليوم دون جدوى. سيكون موضع تقدير أي مساعدة.

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

المحلول

إذا قمت بتحديد التركيبات على أنها "مستخدمين" ، فإن طريقة استخدامها هي عبر الطريقة بنفس الاسم:

describe PagesController do
  integrate_views
  fixtures :users
  it "should render index template on index call when logged in" do
    session[:user_id] = users(:foo).id
    get 'index'
    response.should render_template('index')
  end
end

المفرد ذو صلة فقط بالفئة نفسها (المستخدم). آمل أن يكون لديك بعض الشعر إذا كان هذا مجرد خطأ في حرف واحد.

نصائح أخرى

إذا كنت ترغب في إعداد تركيباتك على مستوى العالم ، داخلك spec_helper أو rails_helper يمكنك إضافة:

RSpec.configure do |config|
  config.global_fixtures = :all
end
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top