我正在尝试使用 Rspec 测试“创建后”操作。代码如下:
def valid_attributes
{
:zone => Flymgr::Zone.new(:countries => Flymgr::ZoneCountry.first,
:name => 'USA',
:description => 'USA Flight',
:zipcodes => ''),
:price => '100.00',
:class => 'first',
}
end
def valid_session
{}
end
before(:each) do
@request.env["devise.mapping"] = Devise.mappings[:admin]
admin = FactoryGirl.create(:admin)
sign_in admin
end
describe "POST create" do
describe "with valid params" do
it "creates a new Flymgr::Rule" do
expect {
post :create, {:Flymgr_rule => valid_attributes}
}.to change(Flymgr::Rule, :count).by(1)
end
表单所需的属性之一是“区域”,这是一个下拉框,下拉列表的选项是使用不同的表单创建的。我不知道如何使用 Rspec 创建表单条目。如您所见,我尝试从不同的控制器调用方法Flymgr::Zone.new
。我认为这不起作用,并且破坏了我的测试。
任何人都可以建议最好的方法吗?也许我应该使用 FactoryGirl 来创建区域和规则条目?
您的请求参数哈希有一个对象作为值:zone,当您发布它时,它只是“to_s”,这不太可能是您想要的。
一般来说,最佳实践是使用 Factory Girl 构建对象,并使用 attribute_for 策略参数化 post 请求的属性:测试“创建”控制器操作的正确方法是什么? https://stackoverflow.com/questions/10548745/what-is-the-proper-way-to-test-create-controller-actions
您的问题表明该关联是一个属于,因此您只需要发布一个 id 即可。请注意,目前,FactoryGirl 不会为关联创建任何属性。如果规则的工厂定义负责区域关联,则可以使用以下解决方法:
FactoryGirl.build(:flymgr_rule).attributes
还包括 zone_id 但是,您需要排除不需要的参数。
(“id”、“created_at”、“updated_at”等)。
因此,您最好按照在有效发布请求中看到的方式显式插入区域的参数哈希信息。
阅读有关 Factorygirl 属性和关联的帖子:https://github.com/thoughtbot/factory_girl/issues/359 https://github.com/thoughtbot/factory_girl/issues/359
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)