测试时未显示创建的数据

时间:2013-08-24 21:05:05

标签: ruby-on-rails rspec capybara factory-bot

是的,我是BDD测试和测试的新手。我正在使用rspec,factory_girl_rails,selenium和capybara gem。我想测试编辑数据并保存它:

  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会回滚)。

2 个答案:

答案 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并查明它是否确实存在你正在寻找的元素,如果没有,为什么会这样。