Rspec 请求规格和 Rails 5
Rspec request specs and Rails 5
我正在开始一个新项目,我的第一个项目是 Rails 5.1.0。我有一个带有我的第一个请求规范的 pb。
describe 'Users', type: :request do
it 'are created from external data' do
json_string = File.read('path/to/test_data/user_data.json')
params = { user: JSON.parse(json_string) }
headers = { "CONTENT_TYPE" => "application/json" }
expect do
post '/api/v1/users', params.to_s, headers
end.to change {
User.count
}.by(1)
expect(response.status).to eq 200
end
end
此规范 return 错误 ArgumentError: wrong number of arguments (given 3, expected 1)
。 official documentation不多说了
如果我取出 .to_s,然后发送一个散列,如下所示:
post '/api/v1/users', params, headers
我遇到另一个错误:
ArgumentError: unknown keyword: user
有什么想法吗?
我认为他们最近更改了语法。现在它应该使用关键字参数。所以,像这样:
post '/api/v1/users', params: params, headers: headers
这是 的一点补充。如果您要从 Rails 4 升级到 Rails 5,进行 很多 测试,并且不太热衷于全部更改 – 至少在您之前不会已完成升级 – 我找到了使它们使用旧方法签名的方法。
在我的 spec_helper
我添加了
module FixLegacyTestRequests
def get(path, par = {}, hdr = {})
process(:get, path, params: par, headers: hdr)
end
def post(path, par = {}, hdr = {})
process(:post, path, params: par, headers: hdr)
end
def put(path, par = {}, hdr = {})
process(:put, path, params: par, headers: hdr)
end
def delete(path, par = {}, hdr = {})
process(:delete, path, params: par, headers: hdr)
end
end
然后我为每个测试添加了这个配置:
RSpec.configure do |config|
config.before :each do |example|
extend(FixLegacyTestRequests) # to be removed at some point!
end
end
我的测试恢复正常了,我认为它应该是安全的,因为它只应用于当前的 运行 测试,不会污染任何 gem 的代码,例如猴子补丁。
我正在开始一个新项目,我的第一个项目是 Rails 5.1.0。我有一个带有我的第一个请求规范的 pb。
describe 'Users', type: :request do
it 'are created from external data' do
json_string = File.read('path/to/test_data/user_data.json')
params = { user: JSON.parse(json_string) }
headers = { "CONTENT_TYPE" => "application/json" }
expect do
post '/api/v1/users', params.to_s, headers
end.to change {
User.count
}.by(1)
expect(response.status).to eq 200
end
end
此规范 return 错误 ArgumentError: wrong number of arguments (given 3, expected 1)
。 official documentation不多说了
如果我取出 .to_s,然后发送一个散列,如下所示:
post '/api/v1/users', params, headers
我遇到另一个错误:
ArgumentError: unknown keyword: user
有什么想法吗?
我认为他们最近更改了语法。现在它应该使用关键字参数。所以,像这样:
post '/api/v1/users', params: params, headers: headers
这是
在我的 spec_helper
我添加了
module FixLegacyTestRequests
def get(path, par = {}, hdr = {})
process(:get, path, params: par, headers: hdr)
end
def post(path, par = {}, hdr = {})
process(:post, path, params: par, headers: hdr)
end
def put(path, par = {}, hdr = {})
process(:put, path, params: par, headers: hdr)
end
def delete(path, par = {}, hdr = {})
process(:delete, path, params: par, headers: hdr)
end
end
然后我为每个测试添加了这个配置:
RSpec.configure do |config|
config.before :each do |example|
extend(FixLegacyTestRequests) # to be removed at some point!
end
end
我的测试恢复正常了,我认为它应该是安全的,因为它只应用于当前的 运行 测试,不会污染任何 gem 的代码,例如猴子补丁。