2011-11-16 29 views
6

Readme cho Capybara (xem Using Capybara with MiniTest::Spec) nói rằng tôi có thể làm điều này nếu tôi bao gồm mô-đun chính xác, nhưng nó không đưa ra bất kỳ ví dụ minh họa nào về cách ... Tôi đã thử bao gồm mô-đun như sau:Capybara Chấp nhận DSL với MiniTest :: Spec?

class MiniTest::Spec 
    include Capybara::DSL 
end 

... không có kết quả. Tôi vẫn gặp phải lỗi này:

<main>': undefined method feature' for main:Object (NoMethodError)

Làm cách nào để làm việc như được viết trong mã nhận xét?


đặc tả/chấp nhận/api/reward_terms_spec.rb:

require "#{Dir.pwd}/spec/acceptance/acceptance_helper" 

# this syntax works... 

describe 'reward terms acceptance test' do 
    include Capybara::DSL 

    describe '#index' do 
    specify { 
     visit '/reward_terms' 
     # ... 
    } 
    end 
end 

# this syntax doesn't work... 

# feature 'RewardTerms', %q{ 
# In order to get all reward terms available to me 
# As an API client 
# I want to list all active RewardTerms 
# } do 

# background do 
#  set_api_headers 
# end 

# scenario 'RewardTerm index' do 
#  visit '/reward_terms' 
#  ... 
# end 
# end 

đặc tả/chấp nhận/acceptance_helper.rb:

ENV["RAILS_ENV"] = "test" 
require "#{Dir.pwd}/config/environment" 

require 'minitest/autorun' 
require 'capybara/rails' 

def set_api_headers(device_id = 'abcd1234') 
    header 'Accept', 'application/json' 
    header 'X-Device-Id', device_id 
end 

Trả lời

2

Có một mô tả ngơi thoải mái tại this post về cách bạn nên thực hiện MinitTest :: Spec chạy với capybara. Ở đó, ông về cơ bản bao gồm các Capybara :: DSL vào lớp cơ sở của tất cả các thông số kỹ thuật như trong

class RequestSpec < MiniTest::Spec 
    include Rails.application.routes.url_helpers 
    include Capybara::DSL 
end 

làm việc này khá độc đáo trong thiết lập của chúng tôi, nhưng tất nhiên nó không mở lại MiniTest :: Spec.

+0

Yeah, tôi thấy bài đó, nhưng điều đó chỉ cho phép bạn sử dụng quẹt Capybara, không phải là DSL BDD để thử nghiệm chấp nhận, đó là những gì tôi sau ... – neezer

+0

Trên [link] (https://github.com/jnicklas/capybara) phần trên Capybara DSL được chứa trong phần "Sử dụng Capybara với RSpec", ở đó có nội dung "Cuối cùng, Capybara cũng xuất hiện với một DSL tích hợp để tạo ra các thử nghiệm chấp nhận mô tả: ". Tuy nhiên sau khi trình bày DSL trong hành động, nó nói: "' feature' thực ra chỉ là một bí danh cho 'description ...,: type =>: request',' background' là bí danh cho 'before' và' scenario' cho 'nó'." Vì vậy, bạn không may mắn nếu bạn muốn sử dụng nó với MiniTest vì nó là một tính năng chỉ RSpec, nhưng bạn có thể cố gắng xác định bí danh của riêng bạn – Patru

+0

Bài đăng trên blog được liên kết đã bị gỡ xuống khỏi Posterous, nhưng tại đây Lưu trữ Internet: http://web.archive.org/web/20130314201201/http://code-ningja.posterous.com/73460416 –

0

Bạn nên thêm minitest-rails-capybara đá quý đến Gemfile và thêm một từ "tính năng" vào cuối của mô tả như sau:

 
feature 'RewardTerms feature', %q{ 
    In order to get all reward terms available to me 
    As an API client 
    I want to list all active RewardTerms 
} do 

    background do 
    set_api_headers 
    end 

    scenario 'RewardTerm index' do 
    visit '/reward_terms' 
    #... 
    end 
end 

Từ đặc biệt "tính năng" là trường hợp incensitive, và có thể là "trình duyệt". Bạn có thể tùy chỉnh nó bằng cách thêm một dòng vào test_helper.rb:

 
MiniTest::Spec.register_spec_type(/FooBar\z/i, Capybara::Rails::TestCase) 
Các vấn đề liên quan