测试交互请求序列

最佳实践是不使用@instance变量并使用let(:object) 。 但是如何编写调用序列的测试,其中每个步骤都需要先前的状态而不是干净的状态。

我想写这样的代码:

 describe "intearction" do let(:user1) { ... } let(:user2) { ... } it "request" do get "/api/v1/request", {user2}, token(user1) expect(...).to ... end it "confirm" do get "/api/v1/confirm", {user1}, token(user2) expect(...).to ... end end 

但那不行。 它可能只是这样工作:

 describe "intearction" do let(:user1) { ... } let(:user2) { ... } it "all tests" do # request get "/api/v1/request", {user2}, token(user1) expect(...).to ... # confirm get "/api/v1/confirm", {user1}, token(user2) expect(...).to ... end end 

it变得无法使用,测试名称成为注释或放入控制台。 rspec子系统失去了它的目的。 使用@instance变量是不好的做法,是否有任何let like定义函数不会为每个测试创建新的普通变量但是每组测试?

序列和api不存在第一年。 你测试序列的做法是什么?

在测试中,当您需要为测试准备环境时,您可以在阻止before进行测试。 所以这是你的测试的样子

 describe "intearction" do let(:user1) { ... } let(:user2) { ... } describe '#request' do it "does something" do get "/api/v1/request", {user2}, token(user1) expect(...).to ... end end describe '#confirm' do context 'request was made before' do before { get "/api/v1/request", {user2}, token(user1) } it "does something as well" do get "/api/v1/confirm", {user1}, token(user2) expect(...).to ... end end end end