我想知道它的正确用途是什么。
我有个控制器
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但是我要用什么来做这个对象呢?我试过这门课和其他一些随机的东西,但都没有用。看来我一点也不懂面具。有什么建议吗?
向denym_问好
发布于 2014-03-21 07:55:54
您需要在规范中用客户端替换对象。此外,该方法的名称仅为"generate_token“,而不是"generate_token!”就像你目前在你的规范中所做的那样。
看起来你在混合generate_token!在控制器和客户端模型中的generate_token方法中。
在编辑操作中,您要调用generate_token!在同一个类(控制器)中定义(我假设您只在这里粘贴了编辑操作,因此您的控制器中可能确实有此方法)。不管怎么说,如果你没有generate_token!方法,该方法在控制器中具有如下一行:
@client.generate_token客户端模型中的generate_token永远不会从控制器中调用。
还有一件事:处理客户端记录的控制器的名称真的称为users_controller?
如果您确实有一个单独的用户和客户端模型,这也会导致问题。
我想我现在知道你的主要困惑是什么了。
期望只会设定你的期望。您仍然需要创建类的实例,并在您希望看到发生的事情发生的地方触发操作。
例如:如果要测试控制器操作,则需要在设置期望之后调用编辑操作。
client = create(:client)
get :edit, id: clienthttps://stackoverflow.com/questions/22552792
复制相似问题