1

私はレールの初心者で、レールアプリケーションをテストしています。rspec を使用して既存の Rails アプリケーションをテストしようとしています。
モデルのテストを終えたばかりで、コントローラーのテストも完了する必要があります。
しかし、rspec の sign_in メソッドに問題があります。インターネットですべての解決方法を試しましたが、それでも rspec を使用してユーザーのようにサインインできません。
これが私のコントローラーコードです。単純すぎます。

class AboutController < ApplicationController
  def index
  end

  def how_it_works
  end

  def what_is
  end

  def creative_tips
  end

  def brand_tips
  end

  def we_are
  end

  def faq
  end
end

これが私の仕様コードです。

require 'spec_helper'

describe AboutController do

  before(:all) do
    @customer=Factory.create(:customer)
    sign_in @customer
  end

  context 'index page :' do

    it 'should be loaded successfully' do
      response.should be_success
    end

  end

end

これが私の工場コードです。

Factory.define :unconfirmed_user, :class => User do |u|
  u.sequence(:user_name) {|n| "user_#{n}"}
  u.sequence(:email){|n| "user__#{n}@example.com"}
  u.sequence(:confirmation_token){|n| "confirm_#{n}"}
  u.sequence(:reset_password_token){|n| "password_#{n}"}
  u.password '123456'
  u.password_confirmation '123456'
  u.user_type :nil
end

Factory.define :user, :parent => :unconfirmed_user do |u|
  u.confirmed_at '1-1-2010'
  u.confirmation_sent_at '1-1-2010'
end

Factory.define :customer, :parent => :user do |u|
  u.user_type :customer
end

最後に、これが私の spec_helper コードです

ENV["RAILS_ENV"] ||= 'test'
require File.dirname(__FILE__) + "/../config/environment" unless defined?(Rails)
require 'rspec/rails'
require "paperclip/matchers"

Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}

RSpec.configure do |config|
  config.include Paperclip::Shoulda::Matchers
end

RSpec.configure do |config|
  config.include Devise::TestHelpers, :type => :controller
end

RSpec.configure do |config|
  config.mock_with :rspec
  config.fixture_path = "#{::Rails.root}/spec/fixtures"
  config.use_transactional_fixtures = true
end

宝石ファイル;

gem 'rails', '3.0.3'
gem 'mysql2', '< 0.3'
.
.
.
gem "devise" , "1.1.5"
.
.
.

group :test do
  gem 'shoulda'
  gem "rspec-rails", "~> 2.11.0"
  gem "factory_girl_rails"
end

ここにエラーがあります。

Failures:

  1) AboutController index page : should be loaded successfully
     Failure/Error: sign_in @customer
     NoMethodError:
       undefined method `env' for nil:NilClass
     # ./spec/controllers/about_controller_spec.rb:7:in `block (2 levels) in <top (required)>'

解決策は簡単すぎるに違いありませんが、私はレールの初心者であり、見つけることができません:(

4

2 に答える 2

1

itrspecが応答にアクセスできるようにするには、ブロック内でサインインステップを実行する必要があります。例:

it 'should be loaded successfully' do
  sign_in @customer
  response.should be_success
end
于 2012-08-26T00:35:54.193 に答える
1

あなたには主題がありません。

require 'spec_helper'

describe AboutController do

  before(:all) do
    @customer=Factory.create(:customer)
    sign_in @customer
  end

  context 'index page :' do

    subject { Page }    
    it 'should be loaded successfully' do
      response.should be_success
    end

  end

end

する必要があるかもしれませんvisit customers_path

于 2012-08-26T01:14:46.043 に答える