在一个rspec测试中键入helper和请求request

时间:2019-03-06 13:42:20

标签: rspec

Rails 5.2.2

当我需要在测试中添加帮助程序时,请使用type helper:

RSpec.describe Utilities, type: :helper do
end

当我需要添加一些请求(例如pach或删除或发布)时,请使用请求类型:

RSpec.describe 'AuthenticationPages', type: 
:request do
end

但是当我需要一起使用type helper并请求时,代码应该是什么?

获取示例代码:

  RSpec.describe Utilities, type: :helper do
  describe 'as wrong user' do
    let(:user) {FactoryGirl.create(:user)}
    let(:wrong_user) {FactoryGirl.create(:user, email: 'wrong@example.com')}
    before {sign_in user, no_capybara: true}

    describe 'submitting a GET request to the Users#edit action' do
       before {get edit_user_path(wrong_user)}
      specify {expect(response.body).not_to match(full_title('Edit user'))}
       specify {expect(response).to redirect_to(root_url)}
    end
 end

2 个答案:

答案 0 :(得分:0)

type只是一部分元数据,您可以在documentation上阅读有关它的更多信息。当使用Rails和Rspec时,会自动推断出该类型会加载额外的东西,以简化测试编写。

据我了解,无法提供类型或类似内容的列表,因此您有几种选择。

选项1 :为您的规格选择一种类型,从另一种类型中手动加载所需的内容。

选项2 :创建一种新的特殊类型,加载您所需要的所有内容,该简短示例摘自rails_helper.rb

RSpec.configure do |config|
  # ...
  config.include JsonHelpers, type: :my_unique_type
  # ...
end

在这种情况下,如果某人用type: :my_unique_type标记了一个规范,则JsonHelpers将被加载并在该规范内可用。

选项3 :划分职责,因此您不需要这两种类型,将帮助程序与请求测试分开进行测试。

答案 1 :(得分:0)

RSpec.describe 'AuthenticationPages', type: :request do
  describe Utilities, type: :helper do

//it's work 

  end
end