最佳做法是不要使用@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
的定义函数,每个测试不会为每组测试创建新的普通变量?
序列和api不存在第一年。你测试序列的做法是什么?
答案 0 :(得分:0)
在需要为测试准备环境的测试中,您可以在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