2011-08-21 18 views
6

Tôi đã có một spec/controllers/add_to_carts_spec.rb:phương pháp xác định 'sign_in' cho # <RSpec :: Lõi :: ExampleGroup :: Nested_1 :: Nested_1: 0x1057fd428> lỗi khi cố gắng thiết lập RSpec với lập mưu

require 'spec_helper' 

describe CartItemsController do 

    before (:each) do 
    @user = Factory(:user) 
    sign_in @user 
    end 

    describe "add stuff to the cart" do 
    it "should add a product to the cart" do 
     product = FactoryGirl.create(:product) 
     visit products_path(product) 
     save_and_open_page 
     click_on('cart_item_submit') 
    end 
    end 

end 

/spec/support/spec_helper.rb:

# This file is copied to spec/ when you run 'rails generate rspec:install' 
ENV["RAILS_ENV"] ||= 'test' 
require File.expand_path("../../config/environment", __FILE__) 
require 'rspec/rails' 
require 'capybara/rspec' 

# Requires supporting ruby files with custom matchers and macros, etc, 
# in spec/support/ and its subdirectories. 
Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f} 

RSpec.configure do |config| 
    config.mock_with :rspec 
    config.use_transactional_fixtures = true 
end 

... mà cũng tải /spec/support/devise.rb:

RSpec.configure do |config| 
    config.include Devise::TestHelpers, :type => :controller 
end 

Guard là chạy trong nền và tiếp tục ném điều này:

Failures: 

    1) CartItemsController add stuff to the cart should add a product to the cart 
    Failure/Error: sign_in @user 
    NoMethodError: 
     undefined method `sign_in' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_1:0x1057fd428> 
    # ./spec/controllers/add_to_carts_spec.rb:7 

Tôi đã dành vài giờ cuối cùng thử các điều chỉnh cấu hình khác nhau và các cú pháp khác nhau nhưng dường như không có gì thay đổi. Bất kỳ ý tưởng?

(chỉnh sửa để phản ánh lỗi mới hơn)

Trả lời

12

Những người giúp đỡ kiểm tra sẽ không làm việc cho hội nhập/yêu cầu thông số kỹ thuật. Cách được đề xuất để kiểm tra Devise trong những tình huống này là truy cập trang đăng nhập, điền vào biểu mẫu và gửi nó, sau đó chạy thử nghiệm.

Vui lòng xem David Chelimsky's answer cho câu hỏi SO trước đó về chủ đề này để được giải thích đầy đủ hơn.

+1

Đó là thông số bộ điều khiển vì vậy tôi hy vọng nó hoạt động. – solnic

+1

Cảm ơn, bạn đã đúng. Tôi đã nhầm lẫn hai loại thông số kỹ thuật. Tôi đã sử dụng capybara để truy cập vào các trang và do đó sử dụng cơ chế phiên của nó, nhưng cố gắng đăng nhập vào người dùng như tôi làm trong thông số kỹ thuật điều khiển của mình. capybara không sử dụng hoặc có quyền truy cập vào những người đó. –

14

Đối với một số lý do này cũng không làm việc cho tôi vì vậy tôi chỉ bằng tay bao gồm helper này trong thông số kỹ thuật của tôi như thế này:

describe CartItemsController do 
    include Devise::TestHelpers 

    # ... 
end 
+0

Thực sự tiện dụng, cảm ơn – Starkers

17

Các giải pháp lý tưởng sẽ là để tạo ra một tập tin tại đặc tả/support/đưa ra rb và bao gồm những người trợ giúp kiểm tra devise trong cấu hình RSpec qua đoạn mã sau:

Rspec.configure do |config| 
    config.include Devise::TestHelpers, :type => :controller 
end 

tham số loại bao gồm những người trợ giúp chỉ trong kỹ thuật điều khiển của bạn, điều này là để tránh các vấn đề trong tương lai có thể phát sinh từ gọi của nó khi thử nghiệm mô hình hoặc chế độ xem. Nó là tùy chọn.

Lý do chúng tôi quyết định thêm một tệp riêng biệt để bao gồm những người trợ giúp, trái ngược với việc đưa chúng vào thông số kỹ thuật đã làm ở trên là vì trong trường hợp các thông số được tạo lại, thông số sẽ bị ghi đè.

+0

Câu trả lời này không có upvotes (khác với của riêng tôi) và hoạt động rất tốt. Đừng bỏ qua điều này như một giải pháp có thể. – Ecnalyr

+0

Mặc dù đây là cách phù hợp để bao gồm những người trợ giúp này nhưng áp phích gốc đã sử dụng phương pháp này mà không thành công. Đó là câu trả lời đúng cho một câu hỏi khác. – zznq

+0

Phần về tham số ': type' là nơi câu hỏi này đã cứu tôi một số nhức đầu. Nó không được ghi rõ trong tài liệu Devise về thử nghiệm. – Matt

Các vấn đề liên quan