目標:検証エラーのために空のレジスタフォームを送信しようとすると失敗します。期待値は、シナリオでは単一行(メソッド)として存在します。エラーは、その配置に関して非常に正確にチェックされています。私はそれが残される唯一の方法であるまで、古典的な数え方を使用したくありません。'未定義のローカル変数またはメソッド'は、ヘルパーのメソッドにエクスポートされます。
def cant_be_blank_error_is_displayed(number_of_times = 1)
expect(page).to have_content t('errors.messages.blank'), count: number_of_times
end
require 'rails_helper'
require 'email_helper'
feature 'register organisation', type: :feature, js: true do
let!(:register_page) { RegisterPage.new }
let!(:login_page) { LoginPage.new }
let!(:organisation) { create :organisation, name: 'organisation_name' }
let!(:owner) { create :user, email: '[email protected]', role: :owner }
let(:form) { register_page.register_form }
before { register_page.load }
context 'creation fails because' do
scenario 'mandatory fields were left empty' do
register_page.submit_empty_form
all_mandatory_fields_cant_be_blank_error_displayed
# expect(form).to have_content mail_blank_or_taken_error
end
scenario (...)
end
end
方法:
1ページ内の要素
class RegisterPage < SitePrism::Page
set_url "/sign_up"
section :register_form, :xpath, "//*[@id='new_user']" do
element :email, :xpath, "//*[@id='user_email']"
(...) # other input fields
# binding.pry confirms they appear on the page
element :mail_blank_or_taken_error, :xpath, "//*[@id='new_user']/div[2]/span"
element :blank_password_error, :xpath, "//*[@id='new_user']/div[4]/span"
element :password_too_short_error, :xpath, "//*[@id='new_user']/div[2]/div[3]/p"
element :mismatch_error, :xpath, "//*[@id='new_user']/div[2]/div[4]/span"
element :blank_name_error, :xpath, "//*[@id='new_user']/div[2]/div[5]/span"
element :name_taken_error, :xpath, "//*[@id='new_user']/div[2]/div[5]"
element :wrong_format_error, :xpath, "//*[@id='new_user']/div[7]/span
(...)
end
end
2として、特定のエラーを定義店にerror_alerts.rb
ヘルパーを作成します。一つの方法
def all_mandatory_fields_cant_be_blank_error_displayed
[
mail_blank_or_taken_error,
blank_password_error,
signs_limit_error,
blank_name_error,
blank_adress_line_error,
blank_city_error,
blank_country_error,
blank_zipcode_error,
blank_phone_number_error,
blank_website_error,
].each do |validation_errors|
expect(form).to have_content validation_errors
end
end
障害: エラーがデフォルトレールのものですので、彼らは私が同じ大会に別の仕様で使用され、すべてが完璧に働いた翻訳、として定義されていません。
例:
def invalid_email_or_password_error_displayed
expect(login_page).to have_content t("devise.failure.invalid", authentication_keys: "Email")
end
障害:私は次のエラーを取得します。
1#私の方法 - 同じ問題が期待|validation_errors|
1) register organisation creation fails because mandatory fields were left empty
Failure/Error: mail_blank_or_taken_error,
NameError:
undefined local variable or method `mail_blank_or_taken_error' for #<RSpec::ExampleGroups::RegisterOrganisation::CreationFailsBecause:0x007fe56b336370>
# ./spec/support/error_alerts.rb:63:in `all_mandatory_fields_cant_be_blank_error_displayed'
# ./spec/features/organisation_registration_spec.rb:16:in `block (3 levels) in <top (required)>'
2#古典から各オブジェクトに対して発生し
1) register organisation creation fails because mandatory fields were left empty
Failure/Error: expect(form).to have_content
mail_blank_or_taken_error
NameError:
undefined local variable or method `mail_blank_or_taken_error' for # <RSpec::ExampleGroups::RegisterOrganisation: :CreationFailsBecause:0x007ff02e7b9348>#./spec/features/organisation_registration_spec.rb:17:in `block (3 levels) in <top (required)>'
質問:は私の方法いくつかの変更または後に技術的に達成可能です唯一の解決策は、古典的な計数方法を使用することですか?ページの要素を反復処理できますか?ここではシンプルな使い方の例ですが、期待は文字列であり、ループ自体はヘルパーの外部メソッドにエクスポートされるのではなく、仕様のシナリオに含まれています。
scenario "is successful" do
all_ministry_memberships_page.create_new(ministry, cabinet, minister)
[
t("flash.actions.create.notice", resource_name: "Ministry membership"),
"Ministry " + ministry.name,
"Cabinet " + cabinet.name,
"Minister " + minister.name,
"Start Date " + (cabinet.appointment_date + 2.days).strftime("%Y-%m-%d"),
"Created At " + ministry_membership.created_at.strftime("%B %0e, %Y %H:%M"),
"Updated At " + ministry_membership.updated_at.strftime("%B %0e, %Y %H:%M"),
].each do |form_input|
expect(form).to have_content form_input
end
end
mail_black_or_taken_error'がregister_page' 'で定義されたエラー要素の名前である'これは、私が達成したかった正確な効果ではありません。 '1)必須フィールドが空のままになっているため登録組織の作成に失敗しました ' '失敗/エラー:expect(form).to have_content validation_errors テキストを見つけることが期待されています .'「[ 、 blank_password_error、EMAIL "は空白にすることはできませんが、それはdoesnの ] '::* EMAILは この1回のパスをblank'することはできません、以下の問題を確認してください" "mail_blank_or_taken_error" にテキストの配置を確認しない – Zelka
@Zelka:まあ、i18nキーを翻訳された文字列に変換する方法は分かっていませんか?(ヒント:作業例を見てください) –
作成翻訳は依然として望ましい効果ではありません。さらに、時間がかかります。 ;)私は自分の問題を解決しました。投稿します。 – Zelka