我正在尝试在我的代码中测试该方法,但第二个测试是返回错误undefined local variable or method 'params'
测试方法的正确方法是什么?或者我需要对main.rb
如何设置进行更改?
代码:
require 'sinatra'
require 'sinatra/reloader'
def get_products_of_all_ints_except_at_index()
@array = [1, 7, 3, 4]
@total = 1
@index = params[:index].to_i
@array.delete_at(@index)
@array.each do |i|
@total *= i
end
end
get '/' do
get_products_of_all_ints_except_at_index
erb :home
end
试验:
ENV['RACK_ENV'] = 'test'
require 'minitest/autorun'
require 'rack/test'
require_relative 'main.rb'
include Rack::Test::Methods
def app
Sinatra::Application
end
describe 'app' do
it 'should return something' do
get '/'
assert_equal(200, last_response.status)
end
it 'should return correct result' do
get_products_of_all_ints_except_at_index
assert_equal(24, @total)
end
end
答案 0 :(得分:1)
您没有通过获取请求传递任何参数,请尝试:
get '/', :index => '1'
答案 1 :(得分:0)
第一次测试有效,因为在调用params
时,您有一个默认的get '/'
地图设置。但是,当您直接调用该方法时,params
为nil
,这就是您收到错误的原因。这里最好的方法是将您需要的数据发送给您方法。类似的东西:
def get_products_of_all_ints_except_at_index index
@array = [1, 7, 3, 4]
@total = 1
@array.delete_at(index)
@array.each do |i|
@total *= i
end
end
get '/' do
get_products_of_all_ints_except_at_index params[:index].to_i
erb :home
end
在代码的最外层通常可以查找请求中的内容。那么业务代码也将获得更高的可测试性!