我有我的控制器,从一个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