【发布时间】:2019-01-20 00:39:51
【问题描述】:
我正在测试我的控制器以确保调用了一个库类并且该功能按预期工作。 注意:这可能已在其他地方问过,但我需要帮助解决我的具体问题。我也很想知道如何最好地对此进行测试。
为了更好地解释我的问题,我将通过代码提供上下文。
我的/Lib 文件夹中有一个类,它会发出事件(如果您不明白这意味着什么,请不要介意)。这个类看起来像这样:
class ChangeEmitter < Emitter
def initialize(user, role, ...)
@role = role
@user = user
...
end
def emit(type)
case type
when CREATE
payload = "some payload"
when UPDATE
payload = "some payload"
...
end
send_event(payload, current_user, ...)
end
end
这是我在控制器中使用它的方式:
class UsersController < ApplicationController
def create
@user = User.new(user_params[:user])
if @user.save
render :json => {:success => true, ...}
else
render :json => {:success => false, ...}
end
ChangeEmitter.new(@user, @user.role, ...).emit(ENUMS::CREATE)
end
end
对不起,如果某些代码没有意义,我试图在不暴露太多代码的情况下解释问题。
这是我为测试所做的尝试:
describe UsersController do
before { set_up_authentication }
describe 'POST #create' do
it "calls the emitter" do
user_params = FactoryGirl.attributes_for(:user)
post :create, user: user_params
expect(response.status).to eq(200)
// Here is the test for the emitter
expect(ChangeEmitter).to receive(:new)
end
end
end
我希望ChangeEmitter 类接收new,因为它在执行创建操作时立即被调用。
相反,这是我得到的错误:
(ChangeEmitter (class)).new(*(any args))
expected: 1 time with any arguments
received: 0 times with any arguments
我在上面的代码中遗漏了什么,为什么类没有收到新的。有没有更好的方法来测试上述功能?请注意,这是 Rspec。您的帮助将不胜感激。谢谢。
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4 rspec-rails rspec3