gpt4 book ai didi

ruby-on-rails - 使用 Controller 规范的单行语法

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

我正在尝试为 API Controller 编写简洁的测试,但我在使用 RSpec 提供的“单行”语法时遇到了问题。

我明确地覆盖了主题以引用发布的操作而不是 Controller :

let (:params) { some_valid_params_here }
subject { post :create, params }

当我使用单行语法测试 http_status 时,它工作正常:

it { is_expected.to have_http_status(:created) }
# pass!

但是当我尝试将它用于不同的期望时,它爆炸了:

it { is_expected.to change{SomeActiveRecordModel.count}.by(1) }
# fail! "expected result to have changed by 1, but was not given a block"

值得注意的是,当我以更长的形式运行第二个期望时,明确调用主题时,它起作用了:

it "creates a model" do
expect{ subject }.to change{SomeActiveRecordModel.count}.by(1)
end
# pass

这是否只是单行语法的弱点,它无法处理这种更复杂的表达式?还是我误解了主题是如何推断到这些测试中的?

(注意:我知道将主题设置为 Action 有一些批评者,我很高兴听到意见,但这不是这个问题的目的)。

最佳答案

你可以这样做subject { -> { post :create, params } } 进而它 { is_expected.to change(SomeActiveRecordModel, :count).by(1) }

在这里你们对此进行了很好的讨论 github_topic

关于ruby-on-rails - 使用 Controller 规范的单行语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39853490/

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