1

我有一个简单的方法,它连接到 TCP 服务器并放置单行字符串并关闭连接。连接关闭后,该方法将重定向到特定页面。

我有兴趣测试该方法的重定向并且不关心 TCP 连接值。因此,我最好的解决方法是模拟连接。这是方法,

def print
  server = TCPSocket.new('a.b.c.d', 56423)
  server.puts "Hello Everyone"
  server.close

  redirect_to root_url
end

我的测试看起来像,

it 'redirects to root_url' do
  get :print
  expect(response).to redirect_to(root_url))
end

我的问题是,我不知道如何模拟连接以便可以进入重定向部分。有什么想法吗?

4

1 回答 1

4

有很多方法可以做到这一点,如https://www.relishapp.com/rspec/rspec-mocks/v/3-0/docs中所述。它们在语法和限制执行的程度方面有所不同。

最宽松的方法之一是在您get致电之前包括以下内容:

server = double('server').as_null_object
TCPSocket.stub(:new).and_return(server)

这将允许/忽略传递给的任何参数,TCPSocket.new并忽略传递给从该调用返回的对象的所有消息/参数。

于 2013-12-30T21:45:50.707 回答