问题标签 [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.

0 投票
1 回答
35 浏览

ruby-on-rails - 使用 get 方法时 Rack::Test::Methods 设置 id

我正在努力使用 Rack::Test 的 API 方法。提供资源参数,对于post方法是有意义的,但对于get,似乎没有。当我想获取具有明确id的资源时,我正在尝试发出请求:

它确实有效,但如果我提供一个 id 作为第二个参数,它不会:

如何提供 id 作为单独的参数?将其嵌入字符串中看起来很糟糕。

0 投票
1 回答
377 浏览

ruby-on-rails-4 - 使用 rack_test 调整 Capybara 中的窗口大小

我正在rack_test用作 Capybara 的驱动程序,并且正在尝试调整窗口大小。

我能找到的最好的例子是这个要点,但该resize方法似乎不适用于rack_test

我已经尝试了我在网上看到的各种其他组合,但都没有运气。有没有更简单的方法来调整浏览器窗口的大小?

谢谢!

0 投票
1 回答
704 浏览

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 文件如下

0 投票
2 回答
279 浏览

ruby - 配置 rack-test 以间接启动服务器

这是我的机架应用程序:

实际运行时,它会按应有的方式运行并向所有请求返回“Hello World”。我无法说服 rack-test 使用它。这是我的测试:

当我对此进行测试时,它无法抱怨MainAppLogic不是机架服务器,特别是它没有响应MainAppLogic.call. 我怎样才能让它知道忽略这MainAppLogic不是机架服务器而只是向 发出请求localhost:8080,因为那里的服务器已经启动?

0 投票
0 回答
41 浏览

rspec - RSpec、Rack/Test、Sinatra 消息期望总是通过,即使抛出错误

通过给定的测试测试白名单操作:

通过 pry shell 跳入控制器成功将错误打印到屏幕:

但是测试总是通过...

0 投票
1 回答
319 浏览

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路由上。

所以当然测试不起作用:

Github 源码在这里

如果您能以相对初学者可以理解的方式对一本书(章节、网站、博客等)提出建议,我将不胜感激。

温柔点……我对测试(和编程)很陌生。

0 投票
1 回答
76 浏览

ruby - 我可以使用 rack-test 进行部署测试吗?

我在 中构建了一个简单的 api Sinatra,目的是使用Docker. 我正处于一个可以轻松切换Sinatra到其他东西的阶段,目前我可能会这样做是有一个原因的。

我曾经写过一个 api 使用Express并且重用测试来测试部署是微不足道的:

示例来自:https ://github.com/chaijs/chai-http#integration-testing

现在我想知道我是否可以使用rack-testand完成相同的操作Sinatra。只需发送一个 URL,而不是应用程序,就会崩溃。那么有没有一种简单的方法可以做到这一点?我想我可以在 .js 之上编写一个测试框架rack-test,但我不确定它是否值得,尽管我确实更喜欢Ruby一遍JavascriptSinatra一遍Express.

0 投票
1 回答
265 浏览

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 消息。

因此,问题是 - 为什么以及如何工作?

0 投票
1 回答
87 浏览

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.

0 投票
2 回答
672 浏览

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,并添加了打印语句,但它们从未被调用过。这让我完全不知道引擎盖下有什么样的可怕的黑魔法机架测试。extendedprepended

总结一下:测试实例是在发送第一个请求时动态创建的。被测试的实例是由邪能魔法创建的,并且躲过了所有用钩子抓住它的尝试,所以我找不到模拟它的方法。几乎感觉作者rake-test已经竭尽全力确保在测试期间不能触及应用程序实例。

我仍在摸索解决方案。