it "edit consultant" do
# c = FactoryGirl.create(:consultant)
c = Consultant.create(
orgorcom: "xyz",
year_id: 8,
bidang: "IT & Networking",
project: "E-Sw",
professional_fee: "1000000",
role: "Database Architect",
user_id: 19,
nopkj: "075899 "
)
visit "/consultants?year=#{Time.now.year}"
string = "#consultant#{c.id}"
page.find(string).click_link('Edit')
fill_in "Organization / Company" , :with => c.orgorcom + "aaa"
fill_in "Field", :with => c.bidang + "aaa"
fill_in "Project" , :with => c.project + "aaa"
fill_in "Role", :with => c.role + "aaa"
fill_in "Professional fee", :with => c.professional_fee + 111
click_button "Save"
expect(page).to have_content "Data updated."
sleep 10
# c.destroy
# find('a[href="/consultants/6144/edit?year=2013"]').click
end
但是我创建的数据没有出现&我收到此消息
1) the consultation edit consultant
Failure/Error: page.find(string).click_link('Edit')
Capybara::ElementNotFound:
Unable to find css "#consultant6157"
当我尝试点击下面的现有数据时,它就过去了。
page.find("#consultant6144").click_link('Edit')
我能够打印出顾问ID,但是在测试结束之前神秘的记录仍然没有出现(db会回滚)。
答案 0 :(得分:3)
如果您使用Selenium进行浏览器测试,并在spec_helper
中配置了事务性工具,则这是一个已知问题。 Selenium将在不同的线程中运行,并且与Rspec使用的数据库连接不同,以在事务中创建数据库对象,因此Selenium线程将无法看到它们。
对于这些类型的规范,您将不需要使用事务性工具并使用database_cleaner之类的东西在规范的开头创建对象,然后截断/删除它们。
答案 1 :(得分:0)
您的问题似乎与FactoryGirl无关。 Capybara抛出的错误消息表明对象的id已正确连接到字符串中,但在页面中找不到相应的CSS。
我建议您将launchy gem插入Gemfile中来安装:
group :development, :test do
gem 'launchy'
end
这样,您就可以在功能规范中使用save_and_open_page
方法。然后在引发错误的行之前插入此方法,如下所示:
# ...
save_and_open_page
page.find(string).click_link('Edit')
# ...
调用save_and_open_page
时,您的默认浏览器将在同一页面打开。然后你可以手动检查页面的HTML并查明它是否确实存在你正在寻找的元素,如果没有,为什么会这样。