RSpec:对类似的 it 块使用 each 循环
RSpec: Using a each loop for similar it blocks
我正在编写测试来检查某些端点是否 return 状态为 200。
RSpec.describe 'API -> ' do
before do
@token = get_token
end
describe 'Status of below end points should be 200 -->' do
it "/one should return a status code of 200" do
get("/api/v1/one", params: {
authentication_token: @token
})
expect(response.status).to eql(200)
end
it "/two should return a status code of 200" do
get("/api/v1/two", params: {
authentication_token: @token
})
expect(response.status).to eql(200)
end
it "/three should return a status code of 200" do
get("/api/v1/three", params: {
authentication_token: @token
})
expect(response.status).to eql(200)
end
end
end
有很多这样的端点,我想知道是否有更有效的方式来写这个,比如
RSpec.describe 'API -> ' do
before do
@token = get_token
@end_points = ['one', 'two', 'three', 'four', 'five']
end
describe 'Status of below end points should be 200 -->' do
@end_points.each do |end_point|
it "/#{end_point} shold returns a status code of 200" do
get("/api/v1/#{end_point}", params: {
authentication_token: @token
})
expect(response.status).to eql(200)
end
end
end
end
但这不起作用并给出错误 each called for nil
。
任何帮助都将非常有用,谢谢。
你可以使用的是shared example。
shared_examples "returns 200 OK" do |endpoint|
let(:token) { get_token }
it "should return a status code of 200" do
get(endpoint, params: { authentication_token: token })
expect(response.status).to eql(200)
end
end
describe '..' do
include_examples 'returns 200 OK', '/api/endpoint/1'
include_examples 'returns 200 OK', '/api/endpoint/2'
end
很好,尤其是当每个端点有更多规范时。
至于您的尝试,这是一个简单的范围界定错误。您的实例变量在一个级别上设置,但在另一个级别上使用。设置在同一水平面上。
describe 'Status of below end points should be 200 -->' do
end_points = ['one', 'two', 'three', 'four', 'five']
end_points.each do |end_point|
it "/#{end_point} shold returns a status code of 200" do
get("/api/v1/#{end_point}", params: {
authentication_token: @token
})
expect(response.status).to eql(200)
end
end
end
我正在编写测试来检查某些端点是否 return 状态为 200。
RSpec.describe 'API -> ' do
before do
@token = get_token
end
describe 'Status of below end points should be 200 -->' do
it "/one should return a status code of 200" do
get("/api/v1/one", params: {
authentication_token: @token
})
expect(response.status).to eql(200)
end
it "/two should return a status code of 200" do
get("/api/v1/two", params: {
authentication_token: @token
})
expect(response.status).to eql(200)
end
it "/three should return a status code of 200" do
get("/api/v1/three", params: {
authentication_token: @token
})
expect(response.status).to eql(200)
end
end
end
有很多这样的端点,我想知道是否有更有效的方式来写这个,比如
RSpec.describe 'API -> ' do
before do
@token = get_token
@end_points = ['one', 'two', 'three', 'four', 'five']
end
describe 'Status of below end points should be 200 -->' do
@end_points.each do |end_point|
it "/#{end_point} shold returns a status code of 200" do
get("/api/v1/#{end_point}", params: {
authentication_token: @token
})
expect(response.status).to eql(200)
end
end
end
end
但这不起作用并给出错误 each called for nil
。
任何帮助都将非常有用,谢谢。
你可以使用的是shared example。
shared_examples "returns 200 OK" do |endpoint|
let(:token) { get_token }
it "should return a status code of 200" do
get(endpoint, params: { authentication_token: token })
expect(response.status).to eql(200)
end
end
describe '..' do
include_examples 'returns 200 OK', '/api/endpoint/1'
include_examples 'returns 200 OK', '/api/endpoint/2'
end
至于您的尝试,这是一个简单的范围界定错误。您的实例变量在一个级别上设置,但在另一个级别上使用。设置在同一水平面上。
describe 'Status of below end points should be 200 -->' do
end_points = ['one', 'two', 'three', 'four', 'five']
end_points.each do |end_point|
it "/#{end_point} shold returns a status code of 200" do
get("/api/v1/#{end_point}", params: {
authentication_token: @token
})
expect(response.status).to eql(200)
end
end
end