Aus irgendeinem Grund die post spec
funktioniert gut, aber die post_comment_spec
Test schlägt fehl. Post hat viele post_comments, post_comment gehört zum Post.rspec Controller Spezifikationen Test Post Aktion
Fehler:
1) Posts::PostCommentsController when user is logged in POST create with invalid attributes doesn't save the new product in the db
Failure/Error: <span class="post-comment-updated"><%= local_time_ago(post_comment.updated_at) %></span>
ActionView::Template::Error:
undefined method `to_time' for nil:NilClass
posts_controller
def create
@post = current_user.posts.new(post_params)
authorize @post
if @post.save
respond_to do |format|
format.js
end
else
respond_to do |format|
format.js
end
end
end
post_comments_controller
def create
@post = Post.find(params[:post_id])
@post_comment = @post.post_comments.build(post_comment_params)
authorize @post_comment
@post_comment.user = current_user
#@post_comment.save!
if @post_comment.save
@post.send_post_comment_creation_notification(@post_comment)
@post_comment_reply = PostCommentReply.new
respond_to do |format|
format.js
end
else
respond_to do |format|
format.js
end
end
end
posts_controller_spec.rb
describe "POST create" do
let!(:profile) { create(:profile, user: @user) }
context "with invalid attributes" do
subject(:create_action) { xhr :post, :create, post: attributes_for(:post, user: @user, body: "") }
it "doesn't save the new product in the db" do
expect{ create_action }.to_not change{ Post.count }
end
end
end
post_comments_controller_spec.rb
describe "POST create" do
let!(:profile) { create(:profile, user: @user) }
let!(:post_instance) { create(:post, user: @user) }
context "with invalid attributes" do
subject(:create_action) { xhr :post, :create, post_id: post_instance.id, post_comment: attributes_for(:post_comment, post_id: post_instance.id, user: @user, body: "") }
it "doesn't save the new product in the db" do
expect{ create_action }.to_not change{ PostComment.count }
end
end
end
create.js.erb für die Zeit nach
$("ul.errors").html("");
<% if @post.errors.any? %>
$('.alert-danger').show();
$('ul.errors').show();
<% @post.errors.full_messages.each do |message| %>
$("ul.errors").append($("<li />").html("<%= message.html_safe %>"));
<% end %>
<% else %>
$('ul.errors').hide();
$('.alert-danger').hide();
$('.post-index').prepend('<%= j render @post %>');
collectionPostEditDropdown();
$('.post-create-body').val('');
$('#img-prev').attr('src', "#");
$('#img-prev').addClass('hidden');
$('.btn-create-post').prop('disabled',true);
$('.remove-post-preview').addClass('hidden');
<% end %>
create.js.erb für post_comment
<% unless @post_comment.errors.any? %>
$("#post-comment-text-area-<%= @post_comment.post_id%>").val('');
$(".post-comment-insert-<%= @post_comment.post_id %>").prepend('<%= j render @post_comment %>');
$(".best_in_place").best_in_place();
<% end %>
Neven, ich verstehe nicht wirklich deine Frage. –
'post_comment' ist nicht gespeichert, also' updated_at' ist null –
Wie kann ich es dann testen? Ich meine, der Code ist in Ordnung, da er nur wiedergegeben wird, wenn er richtig gespeichert wird. –