测试交互请求序列
最佳实践是不使用@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