在 Rails testing / rspec 中,'request: true' 和 'type: request' 有什么区别?

In Rails testing / rspec what is the difference between `request: true` and `type: request`?

提问人:CafeHey 提问时间:11/3/2023 更新时间:11/3/2023 访问量:29

问:

我一直在查看测试,我已经看到并使用了,似乎可以互换。request: truetype: request

我想知道它们之间有什么区别,如果有的话,以及使用哪种正确的格式。我发现很难找到有关这两个设置的文档或任何信息,如果有人也能指出这一点,那就太好了,谢谢。

Ruby-on-Rails rSpec 集成测试

评论


答:

2赞 max 11/3/2023 #1

type: :request只是元数据,但它具有特殊的意义,因为它将导致 RSpec::Rails 以规范为基础,这为发送 HTTP 请求提供了帮助程序。ActionDispatch::IntegrationTest

RSpec.describe "Foo", type: :request do
  context "Bar", baz: "Hello World" do
    it "has metadata" do
      expect(example.metadata[:baz]).to eq "Hello World"
      expect(example.metadata[:type]).to eq :request
    end
  end
end

我从未真正看到过它被使用,也没有在文档或生成器中使用,所以可以公平地说这是“错误”的方式。request: true

或者,RSpec::Rails 有一个方法可以让你省略显式类型声明。infer_spec_type_from_file_location!

评论

0赞 engineersmnky 11/3/2023
type: :request和是一回事。请参阅 RSpec::Core::Metadata::build_from_hash:“在内部用于从 args 数组生成哈希。符号被转换为值为 true 的哈希键。这样做是为了支持使用符号的简单标记,而不需要执行 :symbol => truerequest: true
0赞 max 11/3/2023
@engineersmnky我怀疑是这样的。如果使用发电机,我真的看不出有什么意义。
1赞 engineersmnky 11/3/2023
我同意;然而,并不是每个人都使用发电机。我只是认为评论完善了“它们之间有什么区别以及是否有任何区别”的答案: 没有区别和“使用哪种正确的格式”: 我会说,因为文档确实指出:“这样做是为了支持使用符号的简单标记,而不是需要这样做,正如您指出的那样,官方文档没有使用后者的方法。type: :request:symbol => true