【发布时间】:2019-10-15 22:41:54
【问题描述】:
我的几个导师告诉我使用控制器规范测试一段代码,即使内容正在通过一些请求规范进行测试。我想知道是否可以在 rspec 控制器测试中测试是否可以将 @user 之类的实例变量设置为 someObject 或 nil?
到目前为止,我已经尝试了几种不同的方法来测试它,但我在 rspec 测试方面的技能至少可以说是初级的。我尝试的第一件事是模拟 current_user 和 'User.get_from_auth_user(current_user)。模拟对象打印良好并输出。问题是......我希望能够说像expect(@user).to equal(mockedUser) 这样的话,但这似乎永远不会奏效。我总是得到类似的东西:
Expect does not equal received
expected is nil
received is { someMockedObject }
这是我要测试的代码。
class ApplicationController < ActionController::Base
before_action :set_user
def set_user
return if current_user.nil?
@user = User.get_from_auth_user(current_user)
end
end
我想知道我是否走在正确的道路上,或者有什么更好的选择来全面测试这段代码。我觉得答案应该很简单。
【问题讨论】:
-
你是在使用 factory 和 databaserewinder 在 db 中创建对象吗
-
@chans 工厂
-
我选择的替代方法是测试“set_user”返回的内容。我确实期望(controller.set_user).to eq(mockedUser)
标签: ruby-on-rails ruby unit-testing testing rspec