Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 相同的规范,多个断言,可读的输出_Ruby On Rails_Ruby_Rspec - Fatal编程技术网

Ruby on rails 相同的规范,多个断言,可读的输出

Ruby on rails 相同的规范,多个断言,可读的输出,ruby-on-rails,ruby,rspec,Ruby On Rails,Ruby,Rspec,我现在正在为API编写一些请求规范。我看到自己对同样的请求做了很多断言。这包括(但不限于) 使用特定的HTTP状态代码进行响应 更改一个或多个ActiveRecord对象的状态 使用特定的JSON数据结构进行响应 将特定事件发布到Rabbit 目前,我正在编写四个it块——每个断言一个。我的每个it块现在都包含一个post调用,后跟一个断言。因此,这四个块包含重复的方法调用(我知道我可以用一个简单的例子来概括),但更糟糕的是:它会在应用程序中点击4次 避免所有这些对post和后续请求处理的重

我现在正在为API编写一些请求规范。我看到自己对同样的请求做了很多断言。这包括(但不限于)

  • 使用特定的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')


这样做的想法?

您调查过共享示例组吗?