问题标签 [rack-test]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby-on-rails - 使用 get 方法时 Rack::Test::Methods 设置 id
我正在努力使用 Rack::Test 的 API 方法。提供资源参数,对于post方法是有意义的,但对于get,似乎没有。当我想获取具有明确id的资源时,我正在尝试发出请求:
它确实有效,但如果我提供一个 id 作为第二个参数,它不会:
如何提供 id 作为单独的参数?将其嵌入字符串中看起来很糟糕。
ruby-on-rails-4 - 使用 rack_test 调整 Capybara 中的窗口大小
我正在rack_test
用作 Capybara 的驱动程序,并且正在尝试调整窗口大小。
我能找到的最好的例子是这个要点,但该resize
方法似乎不适用于rack_test
我已经尝试了我在网上看到的各种其他组合,但都没有运气。有没有更简单的方法来调整浏览器窗口的大小?
谢谢!
ruby-on-rails - Capybara 功能规范仅在 js: true 时有效
我在 spec/features/posts_spec.rb 中的测试代码如下所示
该代码适用于js: true
. 但是,如果我取出js: true
,测试会失败,fill_in 'Email'
如果我在此行之前立即使用 save_and_open_page
js: true
我的理解是,除非我需要测试 javascript 函数并且默认rack_test
驱动程序应该可以工作,否则我不应该放置。出了什么问题?我的 spec_helper 文件如下
ruby - 配置 rack-test 以间接启动服务器
这是我的机架应用程序:
实际运行时,它会按应有的方式运行并向所有请求返回“Hello World”。我无法说服 rack-test 使用它。这是我的测试:
当我对此进行测试时,它无法抱怨MainAppLogic
不是机架服务器,特别是它没有响应MainAppLogic.call
. 我怎样才能让它知道忽略这MainAppLogic
不是机架服务器而只是向 发出请求localhost:8080
,因为那里的服务器已经启动?
rspec - RSpec、Rack/Test、Sinatra 消息期望总是通过,即使抛出错误
通过给定的测试测试白名单操作:
通过 pry shell 跳入控制器成功将错误打印到屏幕:
但是测试总是通过...
ruby - 我可以测试 Sinatra post 方法是否成功保存到 YAML 存储?
我在任何地方都找不到关于如何使用 Rack::Test 测试 Ruby/Sinatrapost
方法成功地将数据保存到 YAML 存储/文件的基本解释。(这解释了测试get
,我可以做(!),但不是post
;其他提到的post
带有机架/测试的测试方法似乎无关紧要。)为了自学,我正在用 Ruby/Sinatra 构建一个“待办事项”应用程序,我'正在尝试像一个好孩子一样使用 TDD 一切和单元测试。我的一个要求是:当用户发布新任务时,它会保存在 YML 存储中。
我正在考虑通过查看对用户的响应中是否显示“已保存的任务”来测试它(这当然不是直接测试事物本身......但我也想测试):
assert last_response.body.include?("Task saved")
或者通过某种方式测试测试任务的描述现在是否在 YML 文件中。我想我可以打开 YML 文件并查看,然后将其从 YML 文件中删除,但我很确定这不是我应该做的。
我已经确认post
确实正确保存到 YML 文件:
如您所见,它以重定向结束...我要测试的一个响应实际上是在斜杠路由上,而不是在/newtask
路由上。
所以当然测试不起作用:
如果您能以相对初学者可以理解的方式对一本书(章节、网站、博客等)提出建议,我将不胜感激。
温柔点……我对测试(和编程)很陌生。
ruby - 我可以使用 rack-test 进行部署测试吗?
我在 中构建了一个简单的 api Sinatra
,目的是使用Docker
. 我正处于一个可以轻松切换Sinatra
到其他东西的阶段,目前我可能会这样做是有一个原因的。
我曾经写过一个 api 使用Express
并且重用测试来测试部署是微不足道的:
示例来自:https ://github.com/chaijs/chai-http#integration-testing
现在我想知道我是否可以使用rack-test
and完成相同的操作Sinatra
。只需发送一个 URL,而不是应用程序,就会崩溃。那么有没有一种简单的方法可以做到这一点?我想我可以在 .js 之上编写一个测试框架rack-test
,但我不确定它是否值得,尽管我确实更喜欢Ruby
一遍Javascript
又Sinatra
一遍Express
.
ruby-on-rails - Rails 5, RSpec with RackTest - 删除记录功能测试
我创建了一个非常简单的 Rails 5 演示应用程序,其中包含一堆类别(Category
模型)。有一个_category.html.erb
部分带有删除类别的链接:
对应的destroy
动作:
绝对没有什么花哨的。然后我编写了一个 RSpec 功能测试,它使用 FactoryGirl 创建一个类别,访问类别页面并单击删除链接。之后Category.count
应该等于 0(我还添加了其他检查,例如“期望 Flash 消息包含“类别已销毁!”,但这并不重要)。
所以我的问题是这实际上有效,我真的不明白为什么。问题是 Remove 链接具有method: :delete
由 jquery_ujs 库处理的部分,该库基本上发送带有正确 HTTP DELETE 动词的请求。如果页面上禁用了 JavaScript,并且我尝试手动删除该类别,则它不起作用 - 发送了一个简单的 GET 请求。
我使用 Capybara 的默认 RackTest 驱动程序,它不支持 JavaScript。但是当我检查由它生成的页面截图时,page.save_and_open_page
它确实有正确的 flash 消息。
因此,问题是 - 为什么以及如何工作?
ruby - Why is an Array in my payload being flattened in Sinatra / Rack::Test?
I'm trying to test a small Sinatra app using rspec. I want to pass a rather complex payload and am running into issues i do not understand: my payload contains an array of hashes. When I run the actual application this will work as expected, yet when I use the post
helper to run my tests, the array will contain a merged hash:
In the sinatra handler I use params
to access this payload:
When I now look at the structure of params when running the test suite, I will see the following structure:
which I do not really understand. Is this a syntax issue (me being a ruby noob), am I using params
wrong, or is this a bug?
EDIT: So i found out this is an "issue" with the way that Rack::Test
will serialize the given payload when not specifying how to (i.e. as form data). If I pass JSON and pass the correct headers it will do what I expect it to do:
Still I am unsure of this is an issue with the passed data structure not being possible to be serialized into form data or if this is a bug in the way that Rack::Test
serializes data.
ruby - 如何获取机架测试正在测试的 Sinatra 应用程序实例?
我想掌握 rack-test 正在测试的应用程序实例,以便我可以模拟它的一些方法。我以为我可以简单地将应用程序实例保存在app
方法中,但由于某些奇怪的原因,它不起作用。似乎rack-test
只是使用实例来获取类,然后创建自己的实例。
我做了一个测试来证明我的问题(它需要运行 gems “sinatra”、“rack-test”和“rr”):
怎么rack-test
不使用我提供的实例?如何获取rack-test
正在使用的实例,以便模拟该generate_response
方法?
更新
我没有取得任何进展。事实证明,rack-test
在发出第一个请求(即get("/foo")
)时会即时创建测试实例,因此在此之前无法模拟应用程序实例。
我用 rrstub.proxy(...)
截取.new
,.new!
和.allocate
; 并添加了带有实例类名的 puts 语句和object_id
. 我还在测试类的构造函数以及请求处理程序中添加了此类语句。
这是输出:
注意对象 ID。测试实例(从请求处理程序打印)从未通过.new
,也从未初始化。
因此,令人困惑的是,被测试的实例从未被创建,但不知何故仍然存在。我的猜测是allocate
正在使用它,但代理拦截显示它没有。我跑TestSubject.allocate
自己来验证拦截是否有效,它确实有效。
我还在测试的类中添加了inherited
、和钩子included
,并添加了打印语句,但它们从未被调用过。这让我完全不知道引擎盖下有什么样的可怕的黑魔法机架测试。extended
prepended
总结一下:测试实例是在发送第一个请求时动态创建的。被测试的实例是由邪能魔法创建的,并且躲过了所有用钩子抓住它的尝试,所以我找不到模拟它的方法。几乎感觉作者rake-test
已经竭尽全力确保在测试期间不能触及应用程序实例。
我仍在摸索解决方案。