Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript rspec测试:放置:js=>;true还影响before块_Javascript_Ruby On Rails_Rspec_Linkedin Gem - Fatal编程技术网

Javascript rspec测试:放置:js=>;true还影响before块

Javascript rspec测试:放置:js=>;true还影响before块,javascript,ruby-on-rails,rspec,linkedin-gem,Javascript,Ruby On Rails,Rspec,Linkedin Gem,我有一个用于预约的页面,它有一些javascript代码,可以选择预约最早的时间和日期,之后用户可以单击按钮安排预约 为了测试这一点,我写了一些rspec测试,如下所示 预约书规格rb context "when on the profile page" do before do click_linkedin_button end it 'book an appointment', :js => true do click_link "new-appoi

我有一个用于预约的页面,它有一些javascript代码,可以选择预约最早的时间和日期,之后用户可以单击按钮安排预约

为了测试这一点,我写了一些rspec测试,如下所示

预约书规格rb

context "when on the profile page" do 
  before do 
    click_linkedin_button
  end

  it 'book an appointment', :js => true do 
    click_link "new-appointment"
    choose "doctor1"
    click_button "Submit and Schedule"
    expect(page).to have_content "Congrats!"
  end
end
click_linkedin_按钮是一种方法定义,它只是通过linkedin oauth登录用户。问题是,即使在设置了
OmniAuth.config.mock_auth[:linkedin]
之后,每当我在其块周围设置:js=>true时,它都会要求我通过linkedin登录

我想知道是否有人知道如何解决这个问题

以下是可能与此问题相关的其他文件

spec_helper.rb

require 'capybara/webkit/matchers'
Capybara.javascript_driver = :webkit
Gemfile

gem 'capybara-webkit'
gem 'database_cleaner'
gem 'capybara'

在rspec块中设置
js:true
是在整个示例中使用启用javascript的驱动程序的快捷方式。因此,该驱动程序将在整个执行或示例期间可用和使用,其中包括所有before/after/around块

为了解决这个问题,您可以在示例中需要使用的位置手动设置要使用的驱动程序,而不是使用
js:true

it {
  do_some_stuff_with_default_driver

  Capybara.current_driver = :webkit
  do_some_stuff_with_webkit

  Capybara.current_driver = :selenium
  do_some_stuff_with_selenium
}

编辑 哎呀,我刚刚读到这篇文章,所以这个解决方案可能不会起作用。请让我知道

注意:切换驱动程序创建一个新的会话,因此您可能无法在测试中间切换。


我通过创建一个实际的linkedin帐户解决了这个问题,将身份验证信息放在.env中,并在回调期间调用fill_in方法来填写电子邮件和密码字段。并坚持在整个上下文块中运行js驱动程序


编辑:这当然不是最好的答案,所以我仍然接受其他答案

正如您所发现的,您不能使用一个驱动程序运行部分测试,而使用另一个驱动程序运行部分测试。这等于说

Given I login in using Safari.
Then I should be logged in using Firefox.

因此,您的解决方案是,您必须在测试环境中运行js登录代码才能登录。这实际上是一件好事(您希望测试js登录代码)。如果您希望避免实际连接到linkedin,那么每次运行此测试时,都需要模拟到linkedin的连接。查看VCR(),这将允许您记录与linkedin的连接,以便在后续测试中不必转到linkedin。

您是否尝试过在上下文块而不是it块中设置js:true?是的,这并没有解决问题。您忘记启用模拟了吗
OmniAuth.config.test\u mode=true
(请参阅)否。在spec_helper.rb中设置它