gpt4 book ai didi

ruby-on-rails - RSpec 测试 Controller 实例变量接收消息

转载 作者:数据小太阳 更新时间:2023-10-29 08:58:48 25 4
gpt4 key购买 nike

我知道 Controller 规范中的 expect(assign(:var)) 测试 @var 被分配了一些值。在我的例子中,我想测试这个 @var 是否收到了一条特定的消息。如果我在 get :action 之前执行此操作,则分配返回 nil。如果我之后再做,等到消息就来不及了。

# controller
def action
@var = something
@var.message
render :nothing
end

# spec1
expect(assigns(:var)).to receive(:message) # not working, var is nil
get :action

# spec2
get :action
expect(assigns(:var)).to receive(:message) # not working, expectation too late

最佳答案

您在这里看到的是测试替身或模拟。您可以通过添加 rspec-mocks 来使用它们 gem 或其他测试双 gem ,如 RR .

一旦你有了其中之一(我个人使用 RR),你就可以这样做(RR 的语法):

mock(assigns(:var)).foo
get :action

不是 100% 确定 rspec-mocks 的语法,但它应该看起来像这样:

var = double(assigns(:var))
expect(var).to receive(:foo)
get :action

您应该查看 Message Expectations 的自述文件和 Expecting Arguments如果您需要添加更多支票。

关于ruby-on-rails - RSpec 测试 Controller 实例变量接收消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41735061/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com