使用capybara测试simple_form

时间:2018-08-09 15:00:30

标签: ruby-on-rails capybara simple-form

我有一个simple_form:

apiRoutes.get('/SchoolListing_lssplalpha_Replace', function (req, res) {
schoolListModel.find({},function (err, check) {
    if (err) {
        return console.log(err);
    }
    else {
        for (let checkObj of check) {
            let newPicArr=[];
            for (let pic of checkObj.pics) {
                pic = pic.replace("lssplalpha", "lsslprod");
                newPicArr.push(pic);
            }
            checkObj.pics=newPicArr;
            checkObj.save(function (err) {
                if (err) {
                    console.error('ERROR!');
                }
            });     
        }
        return res.json({ status: true, message: "Updated Schools" });
    }
   });
});

[[底部还有其他东西可以提交]

我正在尝试用水豚/黄瓜对其进行测试。

我可以使用以下方法将内容提交到:old_domain中:

= simple_form_for @client_email, url: { action: "update" }, html: {class: "search_form",  method: :put } do |f|
  = f.error_notification

  .input-row
    = f.input :old_domain, :label => "Old domain name", required: true , input_html: {name: 'search_term'}
    = f.input :new_domain, :label => "New domain name", required: true

但是,我不知道该如何使用“ new_domain” ...我试图在@session.fill_in('search_term', with: search_term) 行中添加id:,但这没有帮助...

HTML中的f.input行是:

:new_domain

ETA: 我相信它应该在寻找名称字段,所以“ client_email [new_domain]”,但出现水豚错误:

<div class="input string required client_email_new_domain">
   <label class="string required control-label" for="client_email_new_domain">
      <abbr title="required">*</abbr> New domain name</label>

   <input class="string required" id="client_email_new_domain" 
      name="client_email[new_domain]" type="text" /></div>

1 个答案:

答案 0 :(得分:1)

fill_in采用输入ID,名称,占位符或相关的标签文本,因此,考虑到HTML提供的以下任何一项,都应填写新的域输入

fill_in 'client_email_new_domain', with: 'whatever'
fill_in 'client_email[new_domain]', with: 'whatever'
fill_in 'New domain name', with: 'whatever'

如果其中任何一个不起作用,则实际上您不在带有您认为存在的可见HTML的页面上。在这种情况下,使用@session.save_and_open_screenshot来查看页面的实际外观,并尝试使用@session.html来查看页面的HTML实际内容(假设@session是实际上是您要在其中进行测试的Capybara会话-否则请对当前会话使用page

要注意的一件事是,如果要将任何JS小部件行为附加到输入中,以隐藏原始输入。如果需要,那么您需要与窗口小部件添加到页面的可见元素进行交互,而不是与隐藏的原始输入元素进行交互。

最后一种可能性是@session实际上不是您访问过该页面的会话。不确定是否要在实例变量中传递当前会话,除非您要测试多个会话?