Ruby on rails 相同的规范,多个断言,可读的输出
我现在正在为API编写一些请求规范。我看到自己对同样的请求做了很多断言。这包括(但不限于)Ruby on rails 相同的规范,多个断言,可读的输出,ruby-on-rails,ruby,rspec,Ruby On Rails,Ruby,Rspec,我现在正在为API编写一些请求规范。我看到自己对同样的请求做了很多断言。这包括(但不限于) 使用特定的HTTP状态代码进行响应 更改一个或多个ActiveRecord对象的状态 使用特定的JSON数据结构进行响应 将特定事件发布到Rabbit 目前,我正在编写四个it块——每个断言一个。我的每个it块现在都包含一个post调用,后跟一个断言。因此,这四个块包含重复的方法调用(我知道我可以用一个简单的例子来概括),但更糟糕的是:它会在应用程序中点击4次 避免所有这些对post和后续请求处理的重
- 使用特定的HTTP状态代码进行响应
- 更改一个或多个ActiveRecord对象的状态
- 使用特定的JSON数据结构进行响应
- 将特定事件发布到Rabbit
it
块——每个断言一个。我的每个it
块现在都包含一个post
调用,后跟一个断言。因此,这四个块包含重复的方法调用(我知道我可以用一个简单的例子来概括),但更糟糕的是:它会在应用程序中点击4次
避免所有这些对post和后续请求处理的重复调用的最简单方法是将4个断言放在相同的it
块下。但是,这会牺牲可读性,并在运行规范套件时产生不充分的输出
基本上,我正在寻找一种方法来写这样的东西:
context 'products#create' do
context 'success' do
post '/some/api/endpoint', some: 'data', headers: {access_key: 1234}
it 'responds with 200 OK' do
expect(response.status).to eq 200
end
it 'changes the database state' do
expect(some_model.reload.title).to eq 'new title'
end
it 'responds with a JSON representation of the resource' do
expect(JSON.parse(response.body)).to match hash_including(desc: 'ription', price: 1234)
end
# and so on...
end
end
我已尝试将post请求放在(:all)之前的块中,但这阻止了我使用allow(SomeExternalService).来接收(:some_call).并返回('something')
这样做的想法?您调查过共享示例组吗?