我有我的控制器,從一個API我無法控制加載了一個對象的實例的實例變量的作用:Ruby on Rails的:硒覆蓋實例變量測試
def index
@obj = MyObj.find(id: params[:id])
end
MyObj中。找到一個API調用並返回該API返回的內容。
現在說我想爲我的視圖編寫一個測試,但我無法使用測試數據庫,因爲我的應用程序依賴於該API。我永遠無法指望API返回一個可測試對象,我想嘗試的一些測試依賴於該對象的狀態。
我希望能夠在呈現我的視圖之前,手動創建我自己的測試@obj
,並讓我的測試對該視圖呈現工作在@obj
通知的視圖渲染上。
理想情況下是這樣的:
before(:all) do
@obj = {attr1: "abc", attr2: 123}
driver.navigate.to("#{ENV['RAILS_HOST']}/my_view/123")
end
其中明確不起作用。有沒有辦法做到這一點?
編輯:試圖存根方法似乎沒有工作,這裏是它目前的樣子:
規格:
before(:each) do
allow(Library::Equipment)
.to receive(:mymethod)
.with(123)
.and_return("Stub method")
puts Library::Equipment.mymethod(123)
#prints "Stub method"
driver.navigate.to("#{ENV['RAILS_HOST']}/library/equipments/123/variables")
end
/library/equipments/:equipment_id/variables
路線library/variables#index
,它看起來像這樣:
def index
@test = Library::Equipment.mymethod(123)
puts @test
#prints "Real method"
# other code...
end
我的Library::Equipment
班有這樣的班級方法:
def self.mymethod(param)
"Real method"
end
而在我的index.html.erb
中,我只需要<%= @test %>
即可查看它包含的內容。正如你所看到的,mymethod
回報有所不同,當從我的規範文件,並從我的index
行動稱爲
使用'RSpec :: Mocks.with_temporary_scope'將允許您在'before(all)'中使用存根,但當範圍結束時將刪除存根。請刪除'with_temporary_scope',並在同一時間之前將(:all)'前面的(:each)'/'前面的''改成''。 – ulferts
結果是一樣的,我編輯了問題以反映所做的更改。 – bpromas