我想在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) 从功能规范文档:
功能规范是用于通过应用程序执行功能切片的高级测试.他们应该只通过其外部接口(通常是网页)来驱动应用程序.
并根据要求规格:
请求规范提供了一个围绕Rails集成测试的瘦包装器,旨在通过完整堆栈驱动行为,包括路由(由Rails提供)而不是存根(由您决定).根据请求规范,您可以:
- 指定单个请求
- 跨多个控制器指定多个请求
- 在多个会话中指定多个请求
我知道功能规格使用Capybara并且请求规格没有.但这几乎不值得采用不同的概念.
describe,context,feature,scenario:什么是四间的差异(一个或多个),做当我使用每一个?
我的模型有一些RSpec测试,我想打开SQL ActiveRecord日志,就像我在Rails服务器模式中看到的那样.怎么做?
我开始测试了
RAILS_ENV=test bundle exec rspec my/test_spec.rb
Run Code Online (Sandbox Code Playgroud)
谢谢
我是第二次做Rails教程.当我进入这个
rails generate integration_test static_pages
Run Code Online (Sandbox Code Playgroud)
我得到的spec/rails_helper.rb和spec/spec_helper.rb,而不是仅仅spec/spec_helper.rb
现在,当我运行我的测试时,它们比我上次这样做时更长(更"冗长")并且更慢.我想知道两个文件之间有什么区别,如果我做错了什么.另外,有没有办法摆脱rails_helper.rb文件而不搞乱一切?
以下代码按预期工作:
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()接收?
在测试场景时,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
我已经在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对象.
我希望我的测试更具体地说明他们正在测试什么,但同时不必触摸数据库.
有人有任何意见吗?
我正在使用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创建时强制创建组或绕过验证?
我有简单的动作节目
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)
怎么解决?
rspec-rails ×10
rspec ×7
rspec2 ×3
ruby ×2
activerecord ×1
capybara ×1
cucumber ×1
factory-bot ×1
file-upload ×1
rspec3 ×1
tdd ×1
testing ×1