Tôi đang xây dựng màn hình thiết lập để thanh toán cho các cá nhân. Bộ điều khiển/lượt xem nằm trong vùng tên quản trị.RSpec-rails-capybara - các lỗi khác nhau với: js => true và không có
Khi chạy thử nghiệm đầu tiên mà không có: js => true Tôi nhận được một lỗi, mà tôi giả định là thực tế là liên kết không hoạt động như một trình trợ giúp sử dụng tập lệnh js để tạo nhóm tập hợp lồng nhau (Dựa trên biểu mẫu đơn Railscasts, nhiều bảng - Thuộc tính lồng nhau).
Failures:
1) Patient Setup create patient bill heading - with extended details -with valid data
Failure/Error: fill_in "Extended Bill Heading", :with => 'Regular Registration'
Capybara::ElementNotFound:
cannot fill in, no text field, text area or password field with id, name, or label 'Extended Bill Heading' found
# (eval):2:in `fill_in'
# ./spec/requests/admin/patient_setup_pages_spec.rb:52:in `block (4 levels) in <top (required)>'
Finished in 0.83047 seconds
3 examples, 1 failure, 2 pending
Nhưng khi tôi sử dụng: js = true, tôi nhận được lỗi có vẻ như đăng nhập với người dùng/mật khẩu không hợp lệ nhấp nháy trên màn hình khi chạy.
Failures:
1) Patient Setup create patient bill heading - with extended details -with valid data
Failure/Error: click_link 'System'
Capybara::ElementNotFound:
no link with title, id or text 'System' found
# (eval):2:in `click_link'
# ./spec/requests/admin/patient_setup_pages_spec.rb:22:in `block (2 levels) in <top (required)>'
Finished in 6.33 seconds
3 examples, 1 failure, 2 pending
Dưới đây là đoạn code mà sao tất cả điều này.
spec/requests/admin/patient_setup_spec.rb
require 'spec_helper'
feature 'Patient Setup' do
let!(:ci_user) { FactoryGirl.create(:user,
name: "configuration engineer",
password: "password",
password_confirmation: "password"
) }
let!(:admin_role) { FactoryGirl.create(:admin_role) }
let!(:assignment) { FactoryGirl.create(:assignment,
:role => admin_role,
:user => ci_user
) }
before do
visit login_path
fill_in "Name", with: "configuration engineer"
fill_in "Password", with: "password"
click_button "Login"
save_and_open_page
click_link 'System'
click_link 'Patient Setup'
end
describe "create patient bill heading" do
before do
click_link 'New Bill Heading'
fill_in 'Bill heading', :with => 'Consultation'
fill_in 'Abbreviation', :with => "CON"
end
context "- no extended details" do
pending
scenario "- with valid data" do
pending
click_button 'Create Patient bill heading'
page.should have_content('Patient Bill Heading created.')
end
end
context "- with extended details", :js => true do #(without :js => true 1st error)
before do
# save_and_open_page
click_link "Extended Bill Heading"
# save_and_open_page
end
scenario "-with valid data" do
save_and_open_page
fill_in "Extended Bill Heading", :with => 'Regular Registration'
end
end
end
end
Đây là thiết lập nhà máy của tôi.
spec/factories.rb
FactoryGirl.define do
# Users, Roles
factory :user do
name "Joesephine Bloggs"
password "testmenow"
password_confirmation "testmenow"
end
factory :admin, :class => User do
sequence(:name) { |n| "Administrator-#{n}" }
password "adminiam"
password_confirmation "adminiam"
after(:create) do |user|
FactoryGirl.create(:assignment, :role => FactoryGirl.create(:admin_role), :user => user)
end
end
factory :role do
description { "Clerical-#{rand(99)}" }
factory :admin_role do
description "Admin"
end
end
factory :assignment do
user
role
end
# Patients Module
factory :patient_bill_heading do
sequence(:bill_heading) { |n| "bill-heading-#{n}" }
sequence(:abbreviation) { |n| "abbreviation-#{n}" }
factory :delete_patient_bill_heading, :class => PatientBillHeading do
bill_heading :bill_heading
abbreviation :abbreviation
end
end
end
Đây là liên kết trong quan điểm của tôi để gọi người trợ giúp tạo các trường thuộc tính lồng nhau.
<p>
<%= link_to_add_fields "Extended Bill Heading", f, :patient_extended_bill_headings %>
</p>
Và đây là trợ giúp.
helpers/application_helper.rb
def link_to_add_fields(name, f, association, options={})
defaults = {
:partial_name => nil
}
options = defaults.merge(options)
new_object = f.object.send(association).klass.new
id = new_object.object_id
fields = f.fields_for(association, new_object, child_index: id) do |builder|
if options[:partial_name].nil?
render(association.to_s.singularize + "_fields", f: builder)
else
render(options[:partial_name], f: builder)
end
end
link_to("#{name} <i class='icon-plus icon-white'></i>".html_safe,
'#',
class: "btn btn-success add_fields",
data: {id: id, fields: fields.gsub("\n", "")}
)
end
Tôi đang cố gắng cải thiện kiến thức kiểm tra RSpec của mình, vì tôi đã xây dựng thành công công việc này trong ứng dụng sau một giờ cố gắng tìm ra lý do tại sao tôi bị lỗi kiểm tra. Vì vậy, trong ứng dụng nó hoạt động, nhưng tôi muốn hiểu làm thế nào để vượt qua bài kiểm tra của tôi.
Xác nhận của tôi là một lỗi là do sử dụng js để tạo liên kết và capybara không chạy nó vì tôi không sử dụng tùy chọn: js => true?
Ai có thể xem tôi đang làm gì sai khi sử dụng tùy chọn: js => true?
Cảm ơn bạn Wei, mà giải quyết được vấn đề. Bây giờ kế tiếp của tôi để giải quyết là với Cancan 'load_and_authorize_resource'! – user1149642
Tôi nghĩ rằng bạn đã có cú pháp sai, không phải là 'config.before (: mỗi) làm | ví dụ |'? – Noz
Không, nó hoạt động - tôi sử dụng cú pháp đó trong một dự án. Tôi đã không đọc quá nhiều vào mã nguồn. Nhưng tôi đoán là nó có liên quan đến https://github.com/rspec/rspec-core/blob/master/lib/rspec/core/example_group.rb#L440. Cú pháp của bạn có lẽ cũng sẽ hoạt động. – Wei