使用 let
整理
我們注意到
user = create(:user)
與 course = build(:course)
重複出現。
其實我們可以用 let
去整理。
按照下面的 diff 修改 spec/controllers/courses_controller_spec.rb
:
diff --git a/spec/controllers/courses_controller_spec.rb b/spec/controllers/courses_controller_spec.rb
index fc68649..a8c083e 100644
--- a/spec/controllers/courses_controller_spec.rb
+++ b/spec/controllers/courses_controller_spec.rb
@@ -41,10 +41,10 @@ RSpec.describe CoursesController, type: :controller do
describe "GET new" do
context "when user login" do
- it "assigns @course" do
- user = create(:user)
- course = build(:course)
+ let(:user) { create(:user) }
+ let(:course) { build(:course) }
+ it "assigns @course" do
sign_in user
get :new
@@ -52,9 +52,6 @@ RSpec.describe CoursesController, type: :controller do
end
it "renders template" do
- user = create(:user)
- course = build(:course)
-
sign_in user
get :new
其實 let(:user) { create(:user) }
大略等同於:
def user
@_user ||= create(:user)
end
那用 let
定義的 user
& course
在那裡可以用呢?
describe "GET new" do
context "when user login" do
let(:user) { create(:user) }
let(:course) { build(:course) }
it "assigns @course" do
...
end
it "renders template" do
...
end
end
context "when user not login" do
...
end
end
這樣看就很清楚 user
& course
只在 context "when user login" do
區塊裡可以用。