所以我有这个规范
describe "visit /signup" do
before(:each) do
get signup_path
end
it "has an email input field" do
page.has_field?("#user_email")
end
it "accepts an email address" do
page.fill_in('#user_email', :with=>Faker::Internet.email)
end
end
第一次测试(有电子邮件输入)通过,第二次测试失败
Failure/Error: page.fill_in('#user_email', :with=>Faker::Internet.email)
Capybara::ElementNotFound:
cannot fill in, no text field, text area or password field with id, name, or label '#user_email' found
输入[type ='text']元素存在于具有该DOM ID的页面上,尝试使用带有和不带散列的ID定位,并使用其输入:name作为定位器。
我做错了什么?
答案 0 :(得分:3)
这是因为当您在get
块中使用visit
时,您正在使用before
。这样:
before(:each) do
get signup_path
end
应该是这样的:
before(:each) do
visit signup_path
end
否则你告诉Rack::Test
访问该路径,不 Capybara!一个很小的区别,经常绊倒很多人!
答案 1 :(得分:2)
也许你应该删除#
,例如
fill_in('user_email', :with=>Faker::Internet.email)
答案 2 :(得分:0)
我认为fill_in不在页面上。只需使用fill_in:
describe "visit /signup" do
before(:each) do
get signup_path
end
it "has an email input field" do
page.has_field?("#user_email")
end
it "accepts an email address" do
fill_in('#user_email', :with=>Faker::Internet.email)
end
end