-2

嘿,我是 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,但在测试结束之前记录仍然神秘地没有出现(数据库将回滚)。

4

2 回答 2

3

如果您使用 Selenium 进行浏览器测试,这是一个已知问题,并且在spec_helper. Selenium 将在不同的线程中运行,并使用与 Rspec 用于在事务中创建数据库对象的数据库连接不同的数据库连接,因此 Selenium 线程将无法看到它们。

对于这些类型的规范,您将不需要使用事务性固定装置,而是使用诸如database_cleaner之类的东西在规范开始时创建对象,然后截断/删除它们。

于 2013-08-25T06:46:29.520 回答
0

您的问题似乎与 FactoryGirl 无关。Capybara 抛出的错误消息表明对象的 id 已正确连接到字符串中,但在页面中未找到相应的 CSS。

我建议您通过将其插入Gemfile来安装启动 gem:

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 并找出它是否确实具有您要查找的元素,如果没有,为什么会发生这种情况。

于 2013-08-24T22:24:17.207 回答