我目前正在通过测试,但我想知道是否可以使用let(:message)
或某种变量重构测试
梅勒测试
describe "Contact Form" do
context "when a valid message" do
it "sends an email" do
post contact_create_path, message: FactoryGirl.attributes_for(:message)
expect(ActionMailer::Base.deliveries.last.to).to eq(["#{ENV["MVP_USERNAME"]}"])
end
end
我要重构的部分是message: FactoryGirl.attributes_for(:message)
。
我试着做像
context "when a valid message" do
let(:message) { FactoryGirl.attributes_for(:message) }
it "sends an email" do
post contact_create_path, message
expect(ActionMailer::Base.deliveries.last.to).to eq(["#{ENV["MVP_USERNAME"]}"])
end
但是那个输出
ActionController::ParameterMissing:
param not found: message
其他尝试
@message = FactoryGirl.attributes_for(:message)
message = FactoryGirl.attributes_for(:message)
我可以这样离开,但我觉得我应该因为某些原因而改变它。建议?
答案 0 :(得分:0)
它看起来并不需要重构,但问题是你的let
语句中的版本只是属性的哈希。它缺少:message
密钥。
let(:message) { message: FactoryGirl.attributes_for(:message) }
这应该有效,但正如我所说,我认为你不需要重构它。我实际上只是确保您将FactoryGirl语法方法混合到您的规范中,这样您就可以放弃FactoryGirl
并直接使用attributes_for
。
在您的规范助手中:
RSpec.configure do |config|
config.include FactoryGirl::Syntax::Methods
end