标签: rspec-rails

使用rspec-rails测试文件上载

我想在rails中测试文件上传,但我不知道如何做到这一点.

这是控制器代码:

def uploadLicense
    #Create the license object
    @license = License.create(params[:license]) 


    #Get Session ID
    sessid = session[:session_id]

    puts "\n\nSession_id:\n#{sessid}\n"

    #Generate a random string
    chars = ("a".."z").to_a + ("A".."Z").to_a + ("0".."9").to_a
    newpass = ""
    1.upto(5) { |i| newpass << chars[rand(chars.size-1)] }

    #Get the original file name
    upload=params[:upload]
    name =  upload['datafile'].original_filename 

    @license.format = File.extname(name)

    #calculate license ID and location
    @license.location = './public/licenses/' + sessid + newpass + name 

    #Save the license file
    #Fileupload.save(params[:upload], @license.location) 
    File.open(@license.location, "wb") { |f| f.write(upload['datafile'].read) }

     #Set license …
Run Code Online (Sandbox Code Playgroud)

tdd file-upload ruby-on-rails rspec-rails

138
推荐指数
5
解决办法
7万
查看次数

RSpec:功能和请求规范之间有什么区别?

Rspec的功能规格请求规范之间的概念差异是什么?

从功能规范文档:

功能规范是用于通过应用程序执行功能切片的高级测试.他们应该只通过其外部接口(通常是网页)来驱动应用程序.

并根据要求规格:

请求规范提供了一个围绕Rails集成测试的瘦包装器,旨在通过完整堆栈驱动行为,包括路由(由Rails提供)而不是存根(由您决定).根据请求规范,您可以:

  • 指定单个请求
  • 跨多个控制器指定多个请求
  • 在多个会话中指定多个请求

我知道功能规格使用Capybara并且请求规格没有.但这几乎不值得采用不同的概念.

rspec ruby-on-rails rspec-rails

111
推荐指数
1
解决办法
2万
查看次数

RSpec:描述,背景,特征,场景?

describe,context,feature,scenario:什么是四间的差异(一个或多个),做当我使用每一个?

rspec rspec2 rspec-rails

101
推荐指数
2
解决办法
2万
查看次数

如何在RSpec测试中打开ActiveRecord的SQL调试日志记录?

我的模型有一些RSpec测试,我想打开SQL ActiveRecord日志,就像我在Rails服务器模式中看到的那样.怎么做?

我开始测试了

RAILS_ENV=test bundle exec rspec my/test_spec.rb
Run Code Online (Sandbox Code Playgroud)

谢谢

ruby activerecord ruby-on-rails rspec-rails

85
推荐指数
4
解决办法
6万
查看次数

spec/rails_helper.rb与spec/spec_helper.rb的不同之处是什么?我需要它吗?

我是第二次做Rails教程.当我进入这个

rails generate integration_test static_pages
Run Code Online (Sandbox Code Playgroud)

我得到的spec/rails_helper.rbspec/spec_helper.rb,而不是仅仅spec/spec_helper.rb

现在,当我运行我的测试时,它们比我上次这样做时更长(更"冗长")并且更慢.我想知道两个文件之间有什么区别,如果我做错了什么.另外,有没有办法摆脱rails_helper.rb文件而不搞乱一切?

testing rspec ruby-on-rails rspec-rails rspec3

83
推荐指数
1
解决办法
2万
查看次数

Object.any_instance should_receive vs expect()接收

以下代码按预期工作:

Object.any_instance.should_receive(:subscribe)
Run Code Online (Sandbox Code Playgroud)

但是当使用新的rspec期望时,它不起作用:

expect(Object.any_instance).to receive(:subscribe)
Run Code Online (Sandbox Code Playgroud)

错误是:

expected: 1 time with any arguments
received: 0 times with any arguments
Run Code Online (Sandbox Code Playgroud)

如何使expect()接收?

rspec rspec2 rspec-rails

75
推荐指数
2
解决办法
2万
查看次数

无法在60秒内获得稳定的firefox连接(127.0.0.1:7055)

在测试场景时,cucumber我在运行rspec测试时遇到以下错误

无法在60秒内获得稳定的firefox连接(127.0.0.1:7055)(Selenium :: WebDriver :: Error :: WebDriverError)

使用ruby (1.9.2) selenium-webdriver (2.27.2)firefox (19.0)

使用rspec-rails (2.12.1),capybara (2.0.2)和其他几个宝石,我也添加了launchy宝石,但他们似乎没有问题.而我正在使用Windows 7.

ruby-on-rails cucumber capybara rspec-rails selenium-webdriver

74
推荐指数
4
解决办法
4万
查看次数

Rails 3.1,RSpec:测试模型验证

我已经在Rails中使用TDD开始了我的旅程,并且遇到了一个关于模型验证测试的小问题,我似乎无法找到解决方案.假设我有一个用户模型,

class User < ActiveRecord::Base
  validates :username, :presence => true
end
Run Code Online (Sandbox Code Playgroud)

和一个简单的测试

it "should require a username" do
  User.new(:username => "").should_not be_valid
end
Run Code Online (Sandbox Code Playgroud)

这正确地测试了状态验证,但如果我想更具体一点怎么办?例如,在errors对象上测试full_messages.

it "should require a username" do
  user = User.create(:username => "")
  user.errors[:username].should ~= /can't be blank/
end
Run Code Online (Sandbox Code Playgroud)

我对初始尝试的关注(使用should_not be_valid)是RSpec不会产生描述性错误消息.它只是说"预期有效?返回虚假,变为现实".但是,第二个测试示例有一个小缺点:它使用create方法而不是new方法来获取errors对象.

我希望我的测试更具体地说明他们正在测试什么,但同时不必触摸数据库.

有人有任何意见吗?

rspec ruby-on-rails rspec2 rspec-rails ruby-on-rails-3

70
推荐指数
4
解决办法
6万
查看次数

Factory-girl创建绕过我的模型验证

我正在使用Factory Girl在我的模型/单元测试中为一个组创建两个实例.我正在测试模型以检查对.current的调用是否仅根据expiry属性返回'current'组,如下所示......

  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
Run Code Online (Sandbox Code Playgroud)

我的问题是我在模型中验证了新组的到期时间是在今天的日期之后.这会引发下面的验证失败.

  1) Group.current 
     Failure/Error: let!(:expired_group) { FactoryGirl.create(:group, :expiry => Time.now - 3.days) }
     ActiveRecord::RecordInvalid:
       Validation failed: Expiry is before todays date
Run Code Online (Sandbox Code Playgroud)

有没有办法在使用Factory Girl创建时强制创建组或绕过验证?

rspec ruby-on-rails rspec-rails ruby-on-rails-3 factory-bot

68
推荐指数
6
解决办法
3万
查看次数

Controller spec未知关键字:id

我有简单的动作节目

def show
  @field = Field.find_by(params[:id])
end
Run Code Online (Sandbox Code Playgroud)

我想要写它的规格

require 'spec_helper'

RSpec.describe FieldsController, type: :controller do

    let(:field) { create(:field) }

  it 'should show field' do
    get :show, id: field
    expect(response.status).to eq(200)
  end
end
Run Code Online (Sandbox Code Playgroud)

但我有一个错误

Failure/Error: get :show, id: field

 ArgumentError:
   unknown keyword: id
Run Code Online (Sandbox Code Playgroud)

怎么解决?

ruby rspec ruby-on-rails rspec-rails ruby-on-rails-5

56
推荐指数
1
解决办法
2万
查看次数