我有一个简单的方法连接到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
我的问题是,我不知道如何模拟连接,以便我可以进入重定向部分。有什么想法吗?
答案 0 :(得分: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
的任何参数,并忽略传递给该调用返回的对象的所有消息/参数。