私はRails Tutorialに従おうとしていますが、私は失敗したrspecを持っていますが、ブラウザではアプリが必要に応じて動作します。つまり、(ブラウザで)サインインして「http:// localhost:3000/users/1/edit」に移動すると、このページが開きます。チュートリアルの以前のすべてのrspecが渡されます。railstutorial.org - rspecは失敗しましたが、ブラウザはすべて正常です
私はRails '3.1.0.rc4'を使用していて、Windowsで作業しています。 (users_controller_spec.rbから)失敗
スペック:factories.rb
Factory.define :user do |user|
user.name "Mikhail"
user.email "[email protected]"
user.password "123456789a"
user.password_confirmation "123456789a"
end
テキストの
RSpec.configure do |config|
config.mock_with :rspec
config.fixture_path = "#{::Rails.root}/spec/fixtures"
config.use_transactional_fixtures = true
def test_sign_in(user)
controller.sign_in(user)
end
end
コード:spec_helper.rbからtest_sign_inの
describe "GET 'edit" do
before(:each) do
@user = Factory(:user)
test_sign_in(@user)
end
it "should be successful" do
get :edit, :id => @user
response.should be_success
end
end
コードコンソールから:
Failures:
1) UsersController GET 'edit should be successful
Failure/Error: response.should be_success
expected success? to return true, got false
# ./spec/controllers/users_controller_spec.rb:111:in `block (3 levels) in <
top (required)>'
UPD:「get:edit、:id => @user」の後、ユーザーはログインしていませんが、ブラウザで書いたように、すべてが必要に応じて動作します。そんなことがあるものか?ここ
はApplicationControlelrに含まれているSessionHelperを次のとおりです。
module SessionsHelper
def sign_in(user)
cookies.permanent.signed[:remember_token] = [user.id, user.salt]
self.current_user = user
end
def sign_out
cookies.delete(:remember_token)
self.current_user = nil
end
def signed_in?
!current_user.nil?
end
def current_user=(user)
@curent_user = user
end
def current_user
@current_user ||= user_from_remember_token
end
def deny_access
redirect_to signin_path, :notice => "Please sign in to access this page."
end
private
def user_from_remember_token
User.authenticate_with_salt(*remember_token)
end
def remember_token
cookies.signed[:remember_token] || [nil, nil]
end
end
spec/factoryから工場のコードを投稿してください する必要があります。user_factory.rb –
私はuser_factory.rbではなくspec/factories.rbを持っています。 (私はコードを投稿しました) –
混乱していることが目立つ部分は、あなたが@userに:id ...を割り当てているということです。idは整数ではありませんか?最悪の場合、ある種の文字列が、ユーザーオブジェクトではありません。 – jaydel