只是想问一下,在你使用allow_any_instance_of
之前重构规范时是否遇到过这种情况,然后将其更改为allow
它无法正常工作。正如我们在文档中所知,allow_any_instance_of
已被弃用,他们鼓励我们使用allow
。我仍然不知道为什么它不起作用。
feature `Something Page Spec here`, retry: 0, js: true do
# some `let` here
before do
sign_in user
setup_something_here
end
describe 'feature here' do
let( :user ) { create( :user ) }
before do
allow_any_instance_of( ActionDispatch::Request ).to receive( :headers ) { { 'something' => 'here' } }
end
context 'something here' do
# then some expectation here
end
end
end
feature `Something Page Spec here`, retry: 0, js: true do
# some `let` here
before do
sign_in user
setup_something_here
request = instance_double( ActionDispatch::Request )
allow( request ).to receive( :headers ) { { 'something' => 'here' } }
end
describe 'feature here' do
let( :user ) { create( :user ) }
context 'something here' do
# then some expectation here
end
end
end
当我在before
中删除它时,我确实撬了我可以得到正确的值但是在after
它已经是零。我很困惑为什么它不起作用。希望有些人可以帮助我解决这个困惑。谢谢!
答案 0 :(得分:0)
它不起作用,因为你只创建了一个只存在于块之前的局部变量request
。
如果您希望这个工作,您还需要存根控制器request
方法来实际返回此变量。
像这样的东西
request = instance_double( ActionDispatch::Request )
allow( request ).to receive( :headers ) { { 'something' => 'here' } }
allow_any_instance_of(YourRelatedController).to receive(:request).and_return(request)
答案 1 :(得分:0)
这里有一些问题
你不应该在功能测试中嘲讽/加倍,因为它会破坏功能测试的全部目的(这确实使其余的问题没有实际意义)
allow_any_instance_of
不被弃用,不建议使用它,因为在结构合理的测试中,99.9%的时间不需要它,但不会弃用
使用instance_double
创建一个ActionDispatch :: Request实例 - 但它不是测试或应用中任何其他代码将要使用的实例。
目前还不清楚您的测试究竟在检查什么,但是,如果您正在尝试测试设置的标头可能更适合请求规范而不是功能规范,具体取决于具体规格标题及其目的是什么