我有一个问题,了解MHartls教程中代码的特定部分来自哪里(因此我似乎无法改变它以更好地满足我的需求......)我所谈论的部分是一个rspec测试:
describe "delete links" do
it { should_not have_link('delete') }
describe "as an admin user" do
let(:admin) { FactoryGirl.create(:admin) }
before do
sign_in admin
visit users_path
end
it { should have_link('delete', href: user_path(User.first)) }
it "should be able to delete another user" do
expect do
click_link('delete', match: :first)
end.to change(User, :count).by(-1)
end
it { should_not have_link('delete', href: user_path(admin)) }
end
现在,测试检查用户的admin属性是true还是false。我试图检查用户的角色属性是否包含“管理员”一词。该模型正在运行,视图正确显示所有内容 - 但我不知道如何重写测试,现在它失败了。
让我困惑的一个部分是“sign_in admin”和“user_path(admin)” - 这是从哪里来的? rspec如何知道管理员是谁? 如果它是某个定义的属性,如果角色是管理员,我可以简单地将它从admin = true / false更改为admin是真的吗?
非常感谢你的帮助!
更新:
我有一个名为factories.rb的文件,这里是根据Mhartls教程的内容:
FactoryGirl.define do
factory :user do
sequence(:name) { |n| "Person #{n}" }
sequence(:email) { |n| "person_#{n}@example.com"}
password "foobar"
password_confirmation "foobar"
factory :admin do
admin true
end
end
end
我尝试将其更改为:
FactoryGirl.define do
factory :user do
sequence(:first_name) { |n| "First #{n}" }
sequence(:last_name) { |n| "Last #{n}" }
sequence(:primary_email) { |n| "person_#{n}@example.com"}
password "foobar"
password_confirmation "foobar"
factory :role do
role "Administrator"
end
end
end
回应您的评论的其他信息:
总结一下:
我不想改变测试测试的内容 - 我只想改变管理员如何通过工厂女性识别。现在它测试属性“admin”是否设置为true或false。我希望它检查属性“role”是否具有内容“Administrator”
答案 0 :(得分:0)
我认为您可能会对您在测试中需要做什么以及在生产代码中需要做什么感到困惑。
如果您改变了FactoryGirl(:admin)
的定义,那么您的测试就可以了。
但是,您需要更改生产代码,以便根据role
定义“admin-ness”,并且您没有提及。