【问题标题】:Rspec set modal visibility to true in before blockRspec 在前块中将模态可见性设置为 true
【发布时间】:2014-09-18 20:09:33
【问题描述】:

我有两个模态出现在特定情况下。我想要一个执行实例的测试,并检查模态是否可见,另一个假设模态可见的测试,然后在模态内部采取行动。

假设这是可能的,在第二次测试中,如何在块之前通过 Rspec 将模态设置为可见?我意识到模态不必为了我要使用它的组件形式,但我想这样做是因为我正在运行一个集成测试:

  1. 用户看到模态
  2. 用户以模态方式填写表单
  3. 如果用户错误填写表单,模态仍然可见(即未提交表单)
  4. 如果用户正确填写表单,模态将变为不可见(即表单提交)

#3/#4 中的底层页面 URL 是相同的,这就是为什么模式可见性是我能想到的唯一测试的原因(我还将测试是否存在错误消息,但在这种情况下,它是碰巧我收到了一条错误消息并且表单仍然提交,所以我有点偏执)。

【问题讨论】:

  • 今天你的单独测试是什么样的?编写 before 块是一个抽象术语,使您的测试 DRY。在您看到代码中有重复之前,您不需要编写这些代码,因此让您的测试使用尽可能多的代码,然后您可以重构。
  • 我没有第二组测试,因为......这就是这个问题。第一组是手动的,因为我还需要整理一些 facebook 集成有趣的业务

标签: twitter-bootstrap ruby-on-rails-4 rspec capybara


【解决方案1】:

假设该模式是用于订阅时事通讯:

it 'valid modal entry', js: true do
  prev_count = NewsletterSubscribers.all.count
  visit_page
  click_modal_thing
  fill_in "Email", with: "test@test.com"
  click_button "Submit"

  expect(page).to have_content "Successfully signed up for newsletter"
  expect(NewsletterSubscribers.all.count).to eq prev_count + 1
end

it 'invalid modal entry', js: true do
  prev_count = NewsletterSubscribers.all.count
  visit_page
  click_modal_thing
  click_button "Submit"

  expect(page).to have_content "Email can't be blank"
  expect(NewsletterSubscribers.all.count).to eq prev_count
end 

那么根据我昨晚留给你的评论,我们清楚地看到这段代码中有一些重复,让我们使用 before 块重构:

before(:each) do
  @prev_count = NewsletterSubscribers.all.count
  visit_page
  click_modal_thing
end

it 'valid modal entry', js: true do

  fill_in "Email", with: "test@test.com"
  click_button "Submit"

  expect(page).to have_content "Successfully signed up for newsletter"
  expect(NewsletterSubscribers.all.count).to eq @prev_count + 1
end

it "invalid modal entry", js: true do
  click_button "Submit"

  expect(page).to have_content "Email can't be blank"
  expect(NewsletterSubscribers.all.count).to eq @prev_count
end 

【讨论】:

  • 所以这看起来像是使用其他测试来确认模态是否正常工作。通常我会同意这种方法,但根据问题,我不确定为什么在这种情况下,我注意到所有测试都通过但模态无论出于何种原因都没有出现或出现错误的情况,这就是为什么我希望使用 before 块来强制更改可见性,而不是通过用户流程
  • 功能规范用于测试用户对您网站的行为。您似乎想测试一个视图是否产生了您期望的结果。如果 CSS 真的是这里的重要部分,您可以使用 within(:css, 'modal-class') 但通常这会被认为是矫枉过正。
  • 所以你说得对,我想测试视图。但即使使用within 语句也不一定对我有帮助,因为我不知道错误是什么,但有时可见性不起作用,这就是为什么我想强制将其设置为 false 以查看它是否会重新启动,而不是仅仅依靠结果。不过,我感觉到的是,没有办法做到这一点,在这种情况下,我会寻找替代方案。感谢您的帮助!
猜你喜欢
  • 2015-12-22
  • 1970-01-01
  • 1970-01-01
  • 2020-04-19
  • 1970-01-01
  • 2011-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多