Questions tagged «rspec»

RSpec是一个受JBehave启发的针对Ruby编程语言的行为驱动开发(BDD)框架。它包含自己的基于JMock的完全集成的模拟框架。该框架可以被视为特定领域的语言(DSL),类似于自然语言规范。

6
如何使用带有正确错误消息的Capybara声明元素数量?
我知道在水豚,您可以执行以下操作: page.should have_css("ol li", :count => 2) 但是,假设该页面仅具有一个匹配元素,则该错误的描述性不是很高: 1) initial page load shows greetings Failure/Error: page.should have_css("ol li", :count => 2) expected css "ol li" to return something 除了这种晦涩的错误消息,还有一种方法可以编写断言,以使错误输出类似于“当匹配'ol li'时,预期:2,发现:1'”。显然,我可以针对这种行为自己制定自定义逻辑-我在问是否有一种方法可以“开箱即用”? 对于它的价值,我正在使用Selenium驱动程序和RSpec。
86 rspec  dsl  capybara 

4
RSpec:希望更改多个
在功能说明中提交表单时,我想检查模型中的许多更改。例如,我要确保将用户名从X更改为Y,并且将加密密码更改为任何值。 我知道已经有一些问题了,但是我没有找到合适的答案。最准确的答案似乎ChangeMultiple是迈克尔·约翰斯顿(Michael Johnston)的匹配者:RSpec是否有可能期望在两个表中进行更改?。它的缺点是只能检查从已知值到已知值的显式更改。 我创建了一些伪代码,说明我认为更好的匹配器看起来像: expect { click_button 'Save' }.to change_multiple { @user.reload }.with_expectations( name: {from: 'donald', to: 'gustav'}, updated_at: {by: 4}, great_field: {by_at_leaset: 23}, encrypted_password: true, # Must change created_at: false, # Must not change some_other_field: nil # Doesn't matter, but want to denote here that this field exists ) …

5
在请求规范中存根身份验证
在编写请求规范时,如何设置会话和/或存根控制器方法?我正在尝试在集成测试中保留身份验证-rspec / requests 这是一个测试的例子 require File.dirname(__FILE__) + '/../spec_helper' require File.dirname(__FILE__) + '/authentication_helpers' describe "Messages" do include AuthenticationHelpers describe "GET admin/messages" do before(:each) do @current_user = Factory :super_admin login(@current_user) end it "displays received messages" do sender = Factory :jonas direct_message = Message.new(:sender_id => sender.id, :subject => "Message system.", :content => "content", …


3
如何在Rails / RSpec中测试异常引发?
有以下代码: def index @car_types = car_brand.car_types end def car_brand CarBrand.find(params[:car_brand_id]) rescue ActiveRecord::RecordNotFound raise Errors::CarBrandNotFound.new end 我想通过RSpec对其进行测试。我的代码是: it 'raises CarBrandNotFound exception' do get :index, car_brand_id: 0 expect(response).to raise_error(Errors::CarBrandNotFound) end ID等于0的CarBrand不存在,因此我的控制器代码引发了Errors :: CarBrandNotFound,但是我的测试代码告诉我什么都没有提出。我该如何解决?我怎么了


6
如何在不运行rake spec的情况下为Rails rspec测试准备测试数据库?
经过大量的故障排除后,我发现我需要先运行rake spec一次(可以使用control-c中止),然后才能直接运行rspec(例如,在我们的部分规格上)。我们正在运行Rails 3.0.7和RSpec 2.5.0。 显然,rake正在运行一些重要的数据库设置任务/代码(我们在根级别Rails Rakefile和其他地方可能有自定义代码)。 如何在不运行的情况下运行rake测试数据库设置任务/代码rake spec? 除了能够在一个文件子集上运行rspec之外,我还使用specjour将我们的规范分布在多个内核上(尚未成功在整个LAN上传播它们),但是我看到的行为与运行rspec相同直接:我需要rake spec在specjour工作之前在每个测试数据库(假设有两个内核)上运行: rake spec TEST_ENV_NUMBER=1 control-c (after tests start) rake spec TEST_ENV_NUMBER=2 control-c (after tests start) specjour 注意:我的config / database.yml具有用于测试的条目(对于并行测试gem来说很常见): test: adapter: postgresql encoding: unicode database: test<%=ENV['TEST_ENV_NUMBER']%> username: user password: parallel_tests似乎正确设置了它的数据库,但是我们的许多规范都失败了。 我还应该提到,运行specjour prepare会导致Postgres记录无法找到数据库的错误,但是会创建它们(没有表)。在随后的运行中,不会记录任何错误,但是也不会创建表。我的整个问题很可能仅是中的错误prepare,因此我在github上进行了报告。 我认为可以通过Specjour::Configuration.prepare在.specjour / hooks.rb中进行设置来在每个specjour测试数据库上运行任意代码,因此,如果有任何我需要运行的rake任务或其他代码,则可以在其中运行。

8
在运行某些JS后,如何使Capybara检查可见性?
加载页面后,我将根据xhr返回的数据运行,隐藏和显示各种项目的代码。 我的集成测试如下所示: it "should not show the blah" do page.find('#blah').visible?.should be_true end 当我手动去到页面的背景下,本次测试运行,#blah是不是如我所料可见。我怀疑Capybara正在查看页面的初始状态(在这种情况下是不可见的),评估DOM的状态并在JS运行之前未通过测试。 是的,我:js => true在包含的describe块上设置了:) 任何想法将不胜感激!我希望我不必在这里故意拖延,那会感觉片状并且会减慢速度。

5
Rspec 3如何测试Flash消息
我想使用rspec测试控制器的动作和Flash消息是否存在。 动作: def create user = Users::User.find_by_email(params[:email]) if user user.send_reset_password_instructions flash[:success] = "Reset password instructions have been sent to #{user.email}." else flash[:alert] = "Can't find user with this email: #{params[:email]}" end redirect_to root_path end 规格: describe "#create" do it "sends reset password instructions if user exists" do post :create, email: …

5
如何在factory_bot中定义数组/哈希?
我正在尝试编写一个测试,该测试模拟Dropbox的REST服务的一些返回值,该返回值将我的数据以嵌套哈希的形式返回给Array。 由于返回结果是一个内部有has的数组,因此我很难弄清楚如何编写Factory代码。会怎么办? Factory.define :dropbox_hash do ?? end Dropbox数据如下所示: ["/home", {"revision"=>48, "rev"=>"30054214dc", "thumb_exists"=>false, "bytes"=>0, "modified"=>"Thu, 29 Dec 2011 01:53:26 +0000", "path"=>"/Home", "is_dir"=>true, "icon"=>"folder_app", "root"=>"app_folder", "size"=>"0 bytes"}] 我想在我的RSpec中进行如下工厂调用: Factory.create(:dropbox_hash)

1
Ruby Rspec:测试实例变量而不向源添加访问器
我正在尝试测试以下方法: def unprocess_move(board, move) if move[0].instance_of?(Array) multi_move = @multi_move.pop(2).reverse multi_move.each do |single_move| unapply_move(board, single_move) end else board = unapply_move(board, move) end board end 我想在这里设置@multi_move的状态,但是我不想添加访问器仅用于测试。没有访问者,有没有办法做到这一点?谢谢。

4
在所有之前vs每个之前的rspec
Competition_entry_spec.rb require 'spec_helper' describe ContestEntry do before(:all) do @admission=Factory(:project_admission) @project=Factory(:project_started, :project_type => @admission.project_type) @creative=Factory(:approved_creative, :creative_category => @admission.creative_category) @contest_entry=Factory(:contest_entry, :design_file_name => 'bla bla bla', :owner => @creative, :project => @project) end context 'non-specific tests' do subject { @contest_entry } it { should belong_to(:owner).class_name('User') } it { should belong_to(:project) } it { …


6
在RSpec中运行Ruby调试?
我试图让Ruby调试器在我的一种规格中运行: describe User do it "should be valid" do debugger User.new.should be_valid end end 当我运行rspec时,我得到: debugger statement ignored, use -d or --debug option to enable debugging 我尝试了以下方法: rake spec --debug rake spec --debug --trace rake spec:models --debug bundle exec rspec --debug bundle exec rspec --debug spec/models/ bundle exec rspec --d …

9
工厂女孩创建绕过我的模型验证
我正在使用Factory Girl在模型/单元测试中为组创建两个实例。我正在测试该模型以检查对.current的调用是否根据如下所述的expiry属性仅返回“当前”组... describe ".current" do let!(:current_group) { FactoryGirl.create(:group, :expiry => Time.now + 1.week) } let!(:expired_group) { FactoryGirl.create(:group, :expiry => Time.now - 3.days) } specify { Group.current.should == [current_group] } end 我的问题是,我已经在模型中进行了验证,该模型可以检查新组的有效期是否在今天的日期之后。这会在下面引发验证失败。 1) Group.current Failure/Error: let!(:expired_group) { FactoryGirl.create(:group, :expiry => Time.now - 3.days) } ActiveRecord::RecordInvalid: Validation failed: Expiry is before todays …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.