假设我想测试我的控制器行为,但它通过 GET 接受 JSON 字符串。
现在我的测试类@testJson 中有var,但是这些JSONS 有时会发生一些意想不到的事情(ie 中的坏字符)。所以我想添加另一个测试用例。
但是添加另一个 var @problematicJson1 (可能还有更多)似乎不是一个好主意。
保持这样的“固定装置”的最佳方法是什么?我应该将它们保存在文件中并加载它们吗?是否有一些我不知道的夹具功能可以提供帮助?
假设我想测试我的控制器行为,但它通过 GET 接受 JSON 字符串。
现在我的测试类@testJson 中有var,但是这些JSONS 有时会发生一些意想不到的事情(ie 中的坏字符)。所以我想添加另一个测试用例。
但是添加另一个 var @problematicJson1 (可能还有更多)似乎不是一个好主意。
保持这样的“固定装置”的最佳方法是什么?我应该将它们保存在文件中并加载它们吗?是否有一些我不知道的夹具功能可以提供帮助?
那些东西不是固定装置。
您应该使用 RSpec 的一个简洁功能(如果您完全使用 RSpec),它允许延迟定义变量,因此只有在特定“它”使用时才实例化实际变量,即使它是在外部“上下文”中定义的/描述”块。
https://www.relishapp.com/rspec/rspec-core/v/2-6/docs/helper-methods/let-and-let
context "some context" do
let(:testJson) { put your json inside the block }
let(:otherJson) { {:my_json => textJson} } # this will use the defined testJson
it "something" do
testJson.should have_key "blah"
end
context "some internal context"
let(:testJson) { something else }
it "some other test" do
otherJson[:my_json].should ....
# this will use the local version of testJson
# you only have to redefine the things you need to, unlike a before block
end
end
end