Tag: rspec

在rails集成规范中向同一个控制器发出两个请求

我在使用rspec在rails集成测试中向同一个url发出两个请求时遇到问题 it ‘does something’ do # get ‘/something’, {:status=>’any_other’}, @header ## <<<<‘ok’}, @header doc = Nokogiri::HTML(response.body) lis = doc.css(‘#the_id’) lis.size.should == 1 lis[0].text.should include(‘anything’) end 如果我向同一个控制器发出两个请求,那么测试似乎保持旧响应…… 在上面的示例中,如果我取消注释该行,则测试会中断,因为它会保留第一个“查询”的结果 它是测试堆栈的限制,还是我做错了什么?

为什么人们在Gemfile中对rspec进行测试和开发?

我对Bundler Gemfile选项一般都很清楚,但我不确定为什么rspec(特别是rspec-rails)应该同时用于测试和开发。 这是我的测试分组: group :development, :test do gem ‘rspec-rails’ gem ‘faker’ end group :test do gem “factory_girl_rails” gem “capybara” gem ‘guard-rspec’ gem ‘rb-fsevent’ gem ‘growl’ end 这看起来不错吗?

尽管链接存在,RSpec应该has_link失败

我有一个RSpec测试,一直在失败。 subject { page } visit user_path(user) it { should have_link(‘Settings’, href: edit_user_path(user)) } 但是当我自己加载页面时,我可以看到链接运行良好。 有任何想法吗 ? 没有拼写错误。 可以在测试中看到RSpec加载的页面吗?

为库模块添加rspec测试似乎并没有提升Expectations和Matchers

我正在为我的应用添加更多的rspec测试,并希望测试一个ScoringMethods模块,它位于/lib/scoring_methods.rb中。 所以我添加了一个/ spec / lib目录并在那里添加了scoring_methods_spec.rb。 我需要spec_helper并设置describe块,如下所示: require File.expand_path(File.dirname(__FILE__) + ‘/../spec_helper’) describe ScoringMethods do describe “should have scorePublicContest method” do methods = ScoringMethods.instance_methods methods[0].should match(/scorePublicContest/) end end 现在, methods[0]是一个String,并且公共方法名称与正则表达式匹配没有问题。 而“spec_helper”的相对路径是正确的。 问题是整个设置似乎没有使用rspec库。 运行示例产生: ./spec/lib/scoring_methods_spec.rb:7: undefined method `match’ for Spec::Rails::Example::RailsExampleGroup::Subclass_1::Subclass_1:Class (NoMethodError) … 似乎缺少整个期望和匹配支持。 为了测试我的假设,我通过将“is_instance_of”替换为“is_foobar_of”来更改了工作助手规范。 该测试完全失败,并说“is_foobar_of”不是目标对象的方法; 它,整个Spec :: Rails :: Example …层次结构不存在。 我也尝试过使用其他匹配器。 我试过“be_instance_of”和其他一些人。 好像我没有正确地包含rspec库。 最后,ScoringMethods是一个模块,就像Helpers是模块一样。 所以我认为可以测试模块(而不是像控制器和模型这样的类)。 我非常感谢你对我做错了什么的想法。 也许有更有效的方法来测试库模块? […]

不需要的符号来转换哈希键的字符串

当我在我的控制器中分配时 @my_hash = { :my_key => :my_value } 并通过执行测试该控制器 get ‘index’ assigns(:my_hash).should == { :my_key => :my_value } 然后我收到以下错误消息: expected: {:my_key=>:my_value}, got: {“my_key”=>:my_value} (using ==) 为什么这种自动符号转换为字符串? 为什么它会影响哈希的键?

RSpec’Expect’语法和惯用属性规范

这应该有一个简单的答案,但我很难找到它(已检查RSpec文档,使用RSpec的EverydayRails测试,谷歌搜索结果)。 在我的模型规范中,我喜欢包括基本属性规范,如下所示: describe Foo do describe “basic attributes” do before { @foo = create(:foo) } subject { @foo } it { should be_valid } it { should respond_to(:color) } it { should respond_to(:height) } it { should respond_to(:some_other_attribute) } it { should respond_to(:you_get_the_idea) } … 我喜欢这些规格,因为如果我的工厂和/或模型中存在某种错误,这些规格可以帮助我快速查明。 我已经将expect语法合并到所有其他规范中,我喜欢它的读取方式,但是如何在这里使用它? 一种选择可能是 expect(@foo).to respond_to(:color) 另一个可能是 expect(it).to respond_to(:color) 前者涉及使用should语法避免的重复,但后者对我来说很奇怪(可能只是我)。 我意识到这个问题更多的是关于风格而不是function*,但我们Ruby开发人员对风格很认真,我希望遵循标准实践并拥有可读的惯用代码。 […]

RSpec请求 – 如何为所有请求设置http授权标头

我正在使用rspec请求来测试需要在每个请求的标头中使用api-key的JSON API。 我知道我可以这样做: get “/v1/users/janedoe.json”, {}, { ‘HTTP_AUTHORIZATION’=>”Token token=\”mytoken\”” } 但是为每个请求做这件事都很繁琐。 我已经尝试在before块中设置request.env ,但由于请求不存在,我得到no method NilClass error 。 我需要一些方法,也许在spec-helper ,全局获取与所有请求一起发送的头。

如何在使用rescue_from时使用Rails4和RSpec测试渲染状态:404

我有一个带有’PagesController’的Rails4应用程序。 当找不到页面时,show-method抛出一个自定义的exception’PageNotFoundError’。 在控制器的顶部,我rescue_from PageNotFoundError, with: :render_not_found定义了rescue_from PageNotFoundError, with: :render_not_found render not found是PagesController的私有方法, PagesController所示: def render_not_found flash[:alert]=t(:page_does_not_exists, title: params[:id]) @pages = Page.all render :index, status: :not_found #404 end rails-log in development-mode显示: Started GET “/pages/readmef” for 127.0.0.1 at 2013-08-02 23:11:35 +0200 Processing by PagesController#show as HTML Parameters: {“id”=>”readmef”} .. Completed 404 Not Found in 14ms (Views: 12.0ms) […]

是否还需要使用Rails系统规范的DatabaseCleaner?

从我所读到的有关Rails 5.1新系统规范的所有内容中,我的理解是Rails现在在内部处理数据库事务。 来自Rspec的博客 :“[之前]您的测试和您测试的代码无法共享数据库事务,因此您无法使用RSpec的内置机制来回滚数据库更改,而是需要像数据库更清洁的gem。通过系统测试,Rails团队已经做了艰苦的工作以确保不是这种情况,因此您可以安全地使用RSpec的机制,而无需额外的gem。“ 我的经历不同: 升级到Rails 5.1后,我的Rspecfunction测试全部通过。 我将’function’规格重命名为’系统’规格。 所有测试都通过了 我删除了Database Cleaner gem,并删除了rails_helper.rb所有引用。 由于validates uniqueness错误,JS测试现在失败了。 非JS测试通过。 我的测试非常简单。 let(:subject) { page } let(:user) { create :user, name: “TestUser” } it “displays the user page”, :js do visit user_path(user) it is_expected.to have_content “TestUser” end 禁用数据库清除程序并且:js => true我得到user named TestUser already exists 。 使用:js => false ,测试通过。 系统测试和rspec的当前情况如何? Rails是否在内部处理数据库事务,还是仍需要数据库清理程序? […]

Rspec:PG :: ConnectionBad:PQsocket()无法获取套接字描述符

我运行我的rspec,大部分测试都失败了。 我得到了同样的错误,这是: Failure/Error: Unable to find matching line from backtrace ActiveRecord::StatementInvalid: PG::ConnectionBad: PQsocket() can’t get socket descriptor: BEGIN 我发现了一个类似于我的问题的问题,但是还没有答案,我也尝试过这个链接的解决方案,但它对我没有任何影响。 我打开我的测试控制台并运行一些最简单的查询,它工作正常。