我想知道它的正确使用方法。
我有一个控制器
class UserController < ApplicationController
def edit
generate_token!
end
end
方法generate_token!
在模型中定义。
class User < ActiveRecord::Base
def generate_token!
self.update!(token: 'something')
end
end
我只想检查方法是否收到了什么。 规范就像是。
describe 'edit'
it 'receives something' do
expect_any_instance_of(Object).to receive(:generate_token!)
end
end
但是我必须为Object使用什么?我尝试了这个课程以及其他一些随机的东西,但还没有任何工作。好像我根本得不到模拟。 有什么建议吗?
最好的问候 denym_答案 0 :(得分:0)
您需要在规范中将Object替换为Client。该方法的名称也只是&#34; generate_token&#34;不是&#34; generate_token!&#34;就像你现在的规范一样。
看来你正在混合generate_token!在您的控制器和客户端模型中的generate_token方法。
在编辑操作中,您正在调用generate_token!在同一个类(控制器)中定义(我假设你只在这里粘贴了编辑动作,所以你可能在控制器中真的有这个方法)。 无论如何,如果你没有generate_token!控制器中的方法,其行如下:
@client.generate_token
您的客户端模型中的generate_token永远不会从您的控制器中调用。
还有一件事:处理客户端记录的控制器的名称真的叫做users_controller?
如果您确实拥有单独的用户和客户端模型,那么这也可能会导致问题。
我想现在我知道你的主要困惑是什么。
期待只设定你的期望。您仍然需要创建类的实例并触发您希望发生的事情发生的操作。
EG。如果您正在测试控制器操作,则需要在设置期望后调用编辑操作。
client = create(:client)
get :edit, id: client