gpt4 book ai didi

ruby-on-rails - Rspec 不执行 AJAX 调用

转载 作者:行者123 更新时间:2023-12-04 18:22:37 25 4
gpt4 key购买 nike

我正在尝试使用 ajax 测试调用 Controller 操作的链接。本质上,当用户点击“关注”时,他将与公司相关联,并且将使用 JS 执行渲染部分。
问题是当我在开发中尝试它时它可以正常工作,但它在测试中没有响应。我一直在尝试很多方法,看起来调用永远不会到达 Controller 。

在这里你可以看到测试:

#spec/integration/following_spec.rb

it "should add the company to the ones followed by the user", :js => true do
find("#current_company").click_link "Follow"
sleep 2
@user.companies_followed.include?(@company).should be_true
end

风景:
#app/views/companies/_follow_button.html.slim

= link_to change_follow_state_company_path(@company), :method => :put, :remote => true, :id => "follow", :class => "btn_block light" do
' Follow

以及测试配置:
#spec/integration_helper.rb

require 'spec_helper'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'capybara/rspec'
require 'capybara/rails'

Dir[Rails.root.join("spec/integration/support/**/*.rb")].each {|f| require f}

RSpec.configure do |config|
config.use_transactional_fixtures = true

config.before do
clear_email_queue
end
end

Rails.cache.clear

最佳答案

您必须考虑到尝试进行 AJAX 调用的不是 RSpec,而是 capybara。

另外,Rails 对 method: :put 做了什么?和 remote: true正在使用 UJS,其中 capybara 与 rack/test开箱即用不能很好地处理(因为它暗示了 javascript)。如果您甚至不使用 remote: true,这可能也是正确的。但只有 method: :put .

我敢打赌,如果您使用 capybara-webkit,那将不会发生:

# Gemfile
gem 'capybara-webkit'

# spec/integration_helper.rb
Capybara.default_driver = :webkit

如果可行,则为 rack/test是什么给你的问题。那是因为在处理 javascript 时它不是那么好。在 cucumber 中有一种叫做 capybara_javascript_emulation 的东西。但在进行测试时我不会依赖它。

我的方法:在需要 javascript 的测试上切换驱动程序并依赖天真的 rack-test在更简单的:)

另外,请使用 spinach , 看在上帝的份上! (或 turnip ,至少):D

关于ruby-on-rails - Rspec 不执行 AJAX 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10348650/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com