Tag: rspec

Shoulda / RSpec:确保validation消息“xxx”已打开:base

我仍然非常困惑什么是it { should have(1).error_on(:base) }背后的魔法it { should have(1).error_on(:base) }以及什么是特定的Shoulda匹配器。 我想确保:base包含错误消息“xxx”,那么我该怎么做呢? it “should contain error message ‘xxx'” do contact.valid? contact.errors[:base].should include(‘xxx’) end 这是“走的路”,还是更好的? 谢谢。

如何测试Singleton类?

我正在使用RSpec并且想要多次测试Singleton类的构造函数。 我怎样才能做到这一点? 最好的祝福

未定义方法’访问’#(NoMethodError)

当我尝试运行rspec测试时,我收到以下错误: /srv/offerme/spec/requests/static_pages_spec.rb:13: undefined method `visit’ for # (NoMethodError) from /var/lib/gems/1.8/gems/rspec-core-2.11.1/lib/rspec/core/example_group.rb:238:in `module_eval’ from /var/lib/gems/1.8/gems/rspec-core-2.11.1/lib/rspec/core/example_group.rb:238:in `subclass’ from /var/lib/gems/1.8/gems/rspec-core-2.11.1/lib/rspec/core/example_group.rb:224:in `describe’ from /srv/offerme/spec/requests/static_pages_spec.rb:12 from /var/lib/gems/1.8/gems/rspec-core-2.11.1/lib/rspec/core/example_group.rb:238:in `module_eval’ from /var/lib/gems/1.8/gems/rspec-core-2.11.1/lib/rspec/core/example_group.rb:238:in `subclass’ from /var/lib/gems/1.8/gems/rspec-core-2.11.1/lib/rspec/core/example_group.rb:224:in `describe’ from /var/lib/gems/1.8/gems/rspec-core-2.11.1/lib/rspec/core/dsl.rb:18:in `describe’ from /srv/offerme/spec/requests/static_pages_spec.rb:3 from /var/lib/gems/1.8/gems/rspec-core-2.11.1/lib/rspec/core/configuration.rb:780:in `load’ from /var/lib/gems/1.8/gems/rspec-core-2.11.1/lib/rspec/core/configuration.rb:780:in `load_spec_files’ from /var/lib/gems/1.8/gems/rspec-core-2.11.1/lib/rspec/core/configuration.rb:780:in `map’ from /var/lib/gems/1.8/gems/rspec-core-2.11.1/lib/rspec/core/configuration.rb:780:in `load_spec_files’ from /var/lib/gems/1.8/gems/rspec-core-2.11.1/lib/rspec/core/command_line.rb:22:in `run’ from /var/lib/gems/1.8/gems/rspec-core-2.11.1/lib/rspec/core/runner.rb:69:in `run’ from /var/lib/gems/1.8/gems/rspec-core-2.11.1/lib/rspec/core/runner.rb:8:in `autorun’ from […]

如何使用rspec在ruby中模拟super?

我通过创建一个扩展到库类的子类来扩展现有的库。 在子类中,我能够在initialize方法中测试大多数function,但无法模拟super调用。 子类看起来像下面的东西。 class Child < SomeLibrary def initialize(arg) validate_arg(arg) do_something super(arg) end def validate_arg(arg) # do the validation end def do_something @setup = true end end 如何编写rspec测试(使用mocha)以便我可以模拟super调用? 请注意,我正在测试Child类中initialize方法的function。 我是否必须创建单独的代码路径,在提供额外参数时不会调用super ?

在RSpec中,在之前使用let变量:all block

我在大多数测试中都有以下代码: describe ‘index’ let(:company) { FactoryGirl.create(:company) } let(:user) { FactoryGirl.create(:user, company: company) } before do sign_in user visit products_path end … end 但我收到以下警告: WARNING: let declaration ‘user’ accessed in a ‘before(:all)’ 我的问题是,这样做的正确方法是什么? 我找不到有关警告本身的更多信息。 谢谢! 编辑:我的目标是使用用户变量,以便我可以将其传递给sign_in,签名用户,然后在另一个测试中使用它(我检查用户的公司属性)

为什么我的RSpec规格会运行两次?

我在我的Rakefile定义了以下RSpec(1.3.0)任务: require ‘spec/rake/spectask’ Spec::Rake::SpecTask.new(:spec) do |spec| spec.libs << 'lib' << 'spec' spec.spec_files = FileList['spec/**/*_spec.rb'] end 我在spec/spec_helper.rb有以下spec/spec_helper.rb : require ‘rubygems’ require ‘spec’ require ‘spec/autorun’ require ‘rack/test’ require ‘webmock/rspec’ include Rack::Test::Methods include WebMock require ‘omniauth/core’ 我在spec/foo/foo_spec.rb声明了一个spec: require File.dirname(__FILE__) + ‘/../spec_helper’ describe Foo do describe ‘#bar’ do it ‘be bar-like’ do Foo.new.bar.should == ‘bar’ end end end 当我运行rake […]

用rspec调用特定的url

我想在rspec中创建一个get请求。 get :exec, {:query=>”bla”, :id => “something”, :user_id => “user” } 这构建了一个URL,如: /user/query/something/exec?query=bla 问题是我的控制器检查它得到的请求,url必须如下: /user/query/something/_XXX_/exec?query=bla 我怎样才能在rspec中做这样的事情? (XXX在routes.rb文件中是硬编码的。)

如何用Rspec测试强对数?

使用Rspec在Rails控制器中测试强params过滤的实际策略是什么? (除了应该匹配)如何编写失败的测试然后使其变为绿色?

访问请求规范中的请求对象

如何在请求规范上执行请求之前设置请求标头? 我正在移动控制器规范以使用Rails在我的API上请求规范。 我坚持的一件事是我无法访问request对象以允许请求。 在我的控制器规格上,我可以访问我创建的一个签署特定用户的方法: def sign_in(user) token = user.api_keys.first.token # note the request object being used in the next line request.env[“HTTP_AUTHORIZATION”] = ActionController::HttpAuthentication::Token.encode_credentials(token) end 这在控制器规格上工作正常,我可以安全地做到: before { sign_in(user) } it { post :endpoint, params } 但是在请求规范中, request对象不可用。 如果我尝试: before { sign_in(user) } it { post “/api/endpoint”, params } 我的帮助方法request为nil 。 我知道我能做到: it { post “/api/endpoint”, […]

在RSpec测试中嘲笑ActiveRecord关系

我通过测试遇到了这个问题。 我们假设我有两个模型,User和Post,其中用户has_many:posts。 我试图指出一个包含这样的代码块: user = User.find(123) post = user.posts.find(456) 我知道如何模拟User.find和user.posts部分。 user.posts mock返回Post对象的数组。 当它到达.find(456)部分时,所有内容都会在no block givenexception。 所以我的问题是:作为user.posts mock的结果我返回什么,以便.find(456)方法可以使用它? User.first.posts.class说它是Array,但显然有更多的东西使AR风格的查找调用工作。 我对于在返回的对象上模拟find方法的前景并不高兴。 PS在你提出明确而好的答案之前,先停止嘲笑和使用固定装置/用必要的数据为测试数据库播种,这里是catch:legacy scheme。 User和Post都在数据库视图之上工作而不是表,并且更改它以使它们成为测试数据库中的表似乎对我不利。