草庐IT

ruby-on-rails - rspec 测试的 JSON 数据

我正在创建一个接受JSON数据的API,我想为其提供测试数据。有没有类似于JSON数据工厂的东西?我希望在对象和JSON中提供相同的数据,以便我可以检查导入是否按预期工作。JSON具有严格定义的结构,所以我不能调用FactoryGirl(:record).to_json。 最佳答案 在这种情况下,我将为要导入的JSON创建夹具文件。像这样的东西可以工作:json=JSON.parse(File.read("fixtures/valid_customer.json"))customer=ImportsData.import(json)

ruby - Rspec 不工作,或提高不提高?

我正在一边学习TDD,一边编写一些小的ruby​​程序。我有以下类(class):classMyDirectorydefcheck(dir_name)unlessFile.directory?(dir_name)thenraiseRuntimeError,"#{dir_name}isnotadirectory"endendend我正在尝试用这个rspec测试来测试它。describeMyDirectorydoit"shoulderrorifdoesn'texist"doone=MyDirectory.newone.check("donee").shouldraise_exception

ruby-on-rails - RSpec:通过正则表达式匹配字符串数组

我正在使用rspec测试我的模型的验证,并期待一条错误消息。但是,消息的确切文本可能会发生变化,所以我想更宽容一点,只检查部分消息。由于Spec::Matchers::include方法只适用于字符串和集合,我目前正在使用这个结构:@user.errors[:password].any?{|m|m.match(/istooshort/)}.shouldbe_true这可行,但对我来说似乎有点麻烦。是否有更好(即更快或更像ruby​​)的方法来检查数组是否包含正则表达式的字符串,或者是否有一个rspec匹配器可以做到这一点? 最佳答案

ruby-on-rails - Rails 上持续的第三方 API 监控和测试

我们想设置自动化作业(通过Jenkins)以在第三方API出现故障或他们部署了不兼容的API时发出警报。我说的是针对真实的HTTPAPI进行测试,而不是模拟,但是因为我们已经使用rspec编写了模拟,所以我不确定我们是否应该通过编写两个独立的睾丸来重复这项工作。有人有这方面的经验吗?(如果其他工具可以提供帮助,我不限于Ruby/Rspec) 最佳答案 你看过VCR了吗??使用它,您可以“记录您的测试套件的HTTP交互并在未来的测试运行期间重播它们以进行快速、确定性、准确的测试”。在测试来自外部API的预期响应时,我将它与RSpec一

ruby - rspec expect语法不支持operator matchers,所以必须传一个matcher给 `#to`

使用新的expect语法:expect(@line.filter_results_and_display_them).to==@processed出现此错误:ArgumentError:Theexpectsyntaxdoesnotsupportoperatormatchers,soyoumustpassamatcherto'#to' 最佳答案 此语法有效:expect(@line.filter_results_and_display_them).toeq@processed 关于ruby

ruby - 是否有调试 RSpec (RSpec2) 中顺序相关测试失败的好方法?

很多时候,人们编写的测试在弄乱状态时不会自行清理。通常这无关紧要,因为对于大多数测试而言,对象往往会被拆除并重新创建,但在某些不幸的情况下,对象的全局状态会在整个测试运行期间持续存在,并且当您运行测试时,这取决于和修改那个全局状态,按照某种顺序,他们失败了。这些测试和可能的实现显然需要修复,但是当相互影响的测试可能不是完整测试套件中唯一的东西时,试图找出导致失败的原因是一件痛苦的事情。当最初不清楚故障是否与顺序相关,并且可能间歇性地或在一台机器上而不是另一台机器上失败时,这尤其困难。例如:rspectest1_spec.rbtest2_spec.rb#failuresintest2rs

ruby - 我如何使用 Rspec 在 Sinatra 中测试 helpers block ?

我正在编写一个sinatra应用程序并使用rspec和rack/test对其进行测试(如sinatrarb.com上所述)。到目前为止它一直很棒,直到我将一些相当程序化的代码从我的域对象移动到sinatra助手。从那时起,我就一直在尝试弄清楚如何单独测试这些? 最佳答案 我通过将辅助方法放在它自己的模块中来单独测试我的sinatra辅助方法。由于我的sinatra应用程序比通常的helloworld示例稍大,我需要将它分成更小的部分。通用助手模块非常适合我的用例。如果您编写了一个快速演示,并且在helpers{...}block中定

ruby - RSpec:如何编写一个期望特定输出但不关心方法的测试?

我正在努力了解测试驱动设计,特别是RSpec。但是我在使用TheRSpecBook中的一些示例时遇到了问题。在本书中,我们像这样测试$STDOUT上的输出:output=double('output')game=Game.newoutput.should_receive(:puts).with('WelcometoCodebreaker!')game.start()好吧,这在时尚之后起作用。但是我到底为什么要关心Game对象是否使用puts()方法呢?如果我把它改成print(),它真的会破坏测试吗?而且,更重要的是,这是否违背了TDD的一项原则——我应该测试方法的作用(设计)而不是它

ruby-on-rails - 匿名 Controller 的 Rspec stubing View

我正在尝试在应用程序Controller上测试一种方法,该方法将用作前置过滤器。为此,我在测试中设置了一个匿名Controller,并应用了before过滤器以确保其正常运行。目前的测试是这样的:describeApplicationControllerdocontrollerdobefore_filter:authenticateddefindexendenddescribe"userauthenticated"dolet(:session_id){"session_id"}let(:user){OpenStruct.new(:email=>"pythonandchips@gmail

ruby - Capybara:如何检查一个元素在许多相似元素中是否有内容?

我需要检查页面上特定类型的选择器中是否存在某些内容。例如,假设我有以下HTML:HEADLINEONEHEADLINETWO我知道如何只选择页面上的第一个:find('h2').shouldhave_content('HeadlineTwo')#have_contentisalsocaseinsensitive我如何检查页面上所有h2中是否存在内容? 最佳答案 显然您可以选择具有给定文本的元素:page.shouldhave_selector('h2',text:/#{headline}/i)注意:我使用正则表达式使文本搜索不区分大