标签: rack-test

如何在Ruby中迭代内存中的zip文件

我正在编写一个单元测试,其中一个正在返回一个zip文件,我想检查这个zip文件的内容,从中获取一些值,并将值传递给下一个测试.

我正在使用Rack Test,所以我知道我的zip文件的内容在里面last_response.body.我查看了RubyZip的文档,但似乎总是期待一个文件.由于我正在运行单元测试,我更喜欢在内存中完成所有操作,以免污染任何带有测试zip文件的文件夹,如果可能的话.

ruby zip in-memory rack-test

11
推荐指数
3
解决办法
6215
查看次数

Rails 5.2中的nil响应对象,RSpec-Rails 3.7规范的GET请求

我一直低着头,觉得我可能犯了一个简单的错误,但我一直无法找到有关这个问题的任何信息.

我有一些Rails 5的请求规范,当我测试重定向时 - 但不是渲染模板 - 我得到一个错误,undefined method 'response_code' for nil:NilClass.这样做的原因似乎是,@responsenil,当匹配被称为(内ActionDispatch ::断言:: ResponseAssertions代码,而不是在我的代码).我能够使用cURL向API发出请求,并按预期返回响应.返回错误的位置在这里(这是ActionDispatch代码):

def generate_response_message(expected, actual = @response.response_code)
  "Expected response to be a <#{code_with_name(expected)}>,"\
  " but was a <#{code_with_name(actual)}>"
  .dup.concat(location_if_redirected).concat(response_body_if_short)
end
Run Code Online (Sandbox Code Playgroud)

注意第一行,其中actualparam 的默认值设置为@response.response_code.

这是我的测试代码:

RSpec.describe "Admin registrations", type: :request do
  describe "new sign-up" do
    subject { get new_admin_registration_path }

    it "redirects to home" do
       expect(subject).to redirect_to(new_admin_session_path)
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

测试日志中的相关行是:

Started GET "/admins/sign_up" for 127.0.0.1 at 2018-07-05 10:44:05 -0700
Processing …
Run Code Online (Sandbox Code Playgroud)

rspec ruby-on-rails rack-test

6
推荐指数
1
解决办法
356
查看次数

如何获取正在通过机架测试进行测试的 Sinatra 应用程序实例?

我想掌握由 rack-test 测试的应用程序实例,以便我可以模拟它的一些方法。我以为我可以简单地将应用程序实例保存在app方法中,但由于某些奇怪的原因不起作用。似乎rack-test只是使用实例来获取类,然后创建自己的实例。

我做了一个测试来证明我的问题(它需要运行宝石“sinatra”、“rack-test”和“rr”):

require "sinatra"
require "minitest/spec"
require "minitest/autorun"
require "rack/test"
require "rr"

describe "instantiated app" do
  include Rack::Test::Methods

  def app
    cls = Class.new(Sinatra::Base) do
      get "/foo" do
        $instance_id = self.object_id

        generate_response
      end

      def generate_response
        [200, {"Content-Type" => "text/plain"}, "I am a response"]
      end
    end

    # Instantiate the actual class, and not a wrapped class made by Sinatra
    @app = cls.new!

    return @app
  end

  it "should have the same object id inside response handlers" do …
Run Code Online (Sandbox Code Playgroud)

ruby unit-testing rack rack-test

5
推荐指数
1
解决办法
577
查看次数

Sinatra 单元测试 - 使用 JSON 正文发布

我正在尝试为我使用 Sinatra 构建的 REST API 构建单元测试。现在我只想测试我的回声功能是否正常工作。Echo 使用 POST 并将从帖子中返回完全相同的有效负载。我对 ruby​​ 还是个新手,所以如果我不使用正确的术语,请原谅我。

这是我要测试的代码:

post '/echo' do
  request.body.read
end
Run Code Online (Sandbox Code Playgroud)

这是我正在尝试进行的单元测试:

ENV['RACK_ENV'] = 'test'
require './rest_server'
require 'test/unit'
require 'rack/test'
require 'json'

class RestServer < Test::Unit::TestCase

  def app
    Sinatra::Application
  end

  def test_check_methods
    data = '{"dataIn": "hello"}'
    response = post '/echo', JSON.parse(data)
    assert.last_response.ok?
    assert(response.body == data)
  end
end
Run Code Online (Sandbox Code Playgroud)

使用上面的代码,这里是错误:

NoMethodError: undefined method `dataIn' for Sinatra::Application:Class
    /Users/barrywilliams/.rvm/gems/ruby-1.9.3-p448/gems/sinatra-1.3.4/lib/sinatra/base.rb:1285:in `block in compile!'
    /Users/barrywilliams/.rvm/gems/ruby-1.9.3-p448/gems/sinatra-1.3.4/lib/sinatra/base.rb:1285:in `each_pair'
    /Users/barrywilliams/.rvm/gems/ruby-1.9.3-p448/gems/sinatra-1.3.4/lib/sinatra/base.rb:1285:in `compile!'
    /Users/barrywilliams/.rvm/gems/ruby-1.9.3-p448/gems/sinatra-1.3.4/lib/sinatra/base.rb:1267:in `route'
    /Users/barrywilliams/.rvm/gems/ruby-1.9.3-p448/gems/sinatra-1.3.4/lib/sinatra/base.rb:1256:in `post'
    /Users/barrywilliams/.rvm/gems/ruby-1.9.3-p448/gems/sinatra-1.3.4/lib/sinatra/base.rb:1688:in `block (2 levels) in delegate'
    /Users/barrywilliams/RubymineProjects/project/rest_server_test.rb:20:in …
Run Code Online (Sandbox Code Playgroud)

ruby unit-testing sinatra rack-test

4
推荐指数
2
解决办法
7401
查看次数

机架测试失败:JSON 请求尚未响应

我正在尝试按照Yehuda Katz 的书《Rails 3 in Action》第 13 章中提供的Ticketee示例为我的 Ruby 项目创建一个 JSON API 。这是第 353 页上描述的适合我的环境的 RSpec 测试。

# /spec/api/v1/farms_spec.rb # Reduced to the minimum code.
require "spec_helper"
include ApiHelper # not sure if I need this

describe "/api/v1/farms", type: :api do
    context "farms viewable by this user" do
        let(:url) { "/api/v1/farms" }
        it "json" do
            get "#{url}.json"
            assert last_response.ok?
        end
    end
end
Run Code Online (Sandbox Code Playgroud)

当我运行测试时,我得到以下输出......

$ rspec spec/api/v1/farms_spec.rb
No DRb server is running. Running in local process instead ... …
Run Code Online (Sandbox Code Playgroud)

ruby rspec ruby-on-rails rack-test

3
推荐指数
1
解决办法
2422
查看次数

使用 Rack::Test 使用 RSpec 测试会话变量

给定代码

env "rack.session", {:var => 'value'}
Run Code Online (Sandbox Code Playgroud)

我可以在机架测试中设置会话变量。但是,我如何(使用机架测试)测试 RSpec 中的所述会话变量?假设一下,例如:

expect(env['rack.session'][:var]).to eq('value')
Run Code Online (Sandbox Code Playgroud)

我似乎找不到任何读取 Rack 环境变量的文档,只能写入它们。

ruby session rack rspec rack-test

3
推荐指数
1
解决办法
1407
查看次数

如何使用 rack::test 发送自定义标头?

我花了大约两天时间尝试使用 Rack::Test 发送自定义标头,但没有成功。我只是无法将任何标头发送到我的应用程序中。我在网上找到了很多类似代码的例子——方法(地址、正文、标题),但对我来说它们根本不起作用。

ruby 2.5.1p57 (2018-03-29 修订版 63029) [x86_64-linux]

# grep rack  Gemfile.lock
    rack (2.0.4)
    rack-protection (2.0.1)
      rack
    rack-test (1.0.0)
      rack (>= 1.0, < 3)
      rack-protection (>= 1.5.0)
      rack (~> 2.0)
      rack-protection (= 2.0.1)
  rack-test
Run Code Online (Sandbox Code Playgroud)

应用程序中的代码(sinatra):

$log = Logger.new STDERR
class MyApi < Sinatra::Application
  before do
    $log.debug{ "Headers: #{ headers.keys.inspect }" }
  end
  get '/offers' do
    #... some code
  end
  post '/offers' do
    # .. some another code
  end
end
Run Code Online (Sandbox Code Playgroud)

规格/api_spec.rb

RSpec.describe MyApi, '/offers' do
  include Rack::Test::Methods
  def app
    MyApi …
Run Code Online (Sandbox Code Playgroud)

ruby rspec sinatra rack-test

3
推荐指数
1
解决办法
1695
查看次数

如何检查响应是否是文件?

如何测试Rails中控制器操作的响应是否为文件?(机架测试或水豚)

我应该使用单元测试吗?

场景很简单:我必须测试来自数据库的导出用户是否与动作生成的.csv中包含的用户相同.

tdd ruby-on-rails testunit minitest rack-test

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