我已通过我的_header部分控制访问某些导航按钮,可在app / views / layouts / _header.html.erb中找到:
<% if signed_in? && current_user.admin? %>
<li><%= link_to "Profile", current_user %></li>
etc
现在我想为要登录的用户和管理员编写测试?布尔值是真的。我确实有工厂设置,我们有:
factory :admin do
admin true
end
我到目前为止的测试是:
describe "as an admin user" do
let(:admin) { FactoryGirl.create(:admin) }
before do
sign_in admin
visit root_path
*this is where I want to test that the Profile, Settings, Users and New User
nav buttons are accessible but I am not sure what the test should say?*
*also should I add:
let (:signed_in) {FactoryGirl.create(user) } in under the first 'let'?*
我想知道我是否需要第二个'let'的原因是因为我需要测试用户是否为signed_in并且他们是否具有管理员权限。
的更新 的 我稍微修改了测试,访问users_path而不是root_path然后我添加了以下内容:
it { should have_link('Users', href: users_path) }
it { should have_link('Profile', href: user_path(user)) }
it { should have_link('Settings', href: edit_user_path(user)) }
it { should have_link('New User', href: new_user_path) }
it { should have_link('Sign out', href: signout_path) }
it { should_not have_link('Sign in', href: signin_path) }
end
end
测试通过,但“个人资料”,“新用户”和“设置”链接除外。
如果您访问实际的“新用户”页面,您可以看到所有链接并单击它们,它们都可以正常工作。
任何想法或建议。
更新1 如果我在其中创建一个只有这个测试的新文件并且我定义了一个方法“valid_signin(admin)”然后我在哪里有user_path(用户)我用user_path(admin)替换它,最后在do do块中我删除了现有两行并替换为valid_signin(admin)...然后我得到测试通过。 令我困惑的是我有一个现有的valid_signin(员工),我想我可以使用valid_signin(admin)。 那么现在我必须让测试通过上下文。