2016-06-27 4 views
0

Метод« ожидать »он недоступен при попытке вызова из метода класса. Тем не менее, он отлично работает при вызове из спецификации функции. Так что в основном последний метод (i_expect_to_see_article_on_home_page) не работает.Метод Capybara неприемлем из calss undefined method `expect 'for # <ArticleForm: 0xb5e98bc>

спецификации/поддержка/ArticleForm.rb

require 'rails_helper' 

class ArticleForm 
    include Capybara::DSL 


    def visit_home_page 
    visit('/') 
    self 
    end 

    def create_an_article 
    click_on('New Article') 
    fill_in('Title', with: "My title") 
    fill_in('Content', with: "My content") 
    click_on('Create Article') 
    self 
    end 

    def i_expect_to_see_article_on_home_page 
    visit('/') 
    expect(page).to have_text("My title") 
    expect(page).to have_text("My content") 
    self 
    end 
end 

спецификации/особенности/article_spec.rb

require 'rails_helper' 

require_relative '../support/ArticelForm.rb' 
feature "home page" do 
    article_form = ArticleForm.new 

    scenario "Visit the home page and post an article" do 
    article_form.visit_home_page.create_an_article 
    article_form.visit_home_page.i_expect_to_see_article_on_home_page 
    end 
end 
+0

У вас слишком много «конца» в спецификации статьи. Вы можете исправить это, пожалуйста, –

+0

какая ошибка вы получаете? – fabersky

+0

undefined method 'has_content 'или undefined method' expect' for # Возможно, вы имели в виду? exec – Faisal

ответ

1

Вы должны include RSpec::Matchers в вашем объекте. Возможно, вам также понадобится сделать то же самое с Capybara :: RSpecMatchers, если вы хотите использовать матчи capybara

+0

это RSpec :: Матчи, которые вам нужно включить, чтобы получить 'expect' –

+0

@FrederickCheung good catch - fixed - thanks –

0

Я не знаком с синтаксисом, который вы используете, но я считаю, что вам нужно, чтобы обернуть его в «это блок» .Это, как я обычно пишу это:

describe "i_expect_to_see_article_on_home_page" do 
    it 'should do something' do 
    visit('/') 
    expect(page).to have_text("My title") 
    expect(page).to have_text("My content") 
    end 
end 
+0

'script' работает так же, как' it' на спецификациях функций. Не уверен, что это просто псевдоним, но я бы предположил так –

+0

Я пытаюсь упростить спецификацию, создав класс с помощью 2 методов. Один метод создания сообщения и другой, чтобы проверить, было ли оно создано. Я делаю это, поэтому я могу централизовать свой код и использовать его в разных местах. Похоже, Capybara просто недоступен во втором методе класса ArticleForm. – Faisal

+0

Я думал, что у capybara были довольно приятные матчи ... –