简体   繁体   English

Ruby on Rails Rspec NoMethodError:未定义的方法“ not_to”

[英]Ruby on Rails Rspec NoMethodError: undefined method 'not_to'

I am testing an email function in a basic app I am building with Ruby on Rails. 我正在使用Ruby on Rails构建的基本应用程序中测试电子邮件功能。 I get a NoMethodError for any test where I use .not_to. 对于使用.not_to的任何测试,我都会收到NoMethodError。 Here is the Rspec, provided by the tutorial I am following: 这是我遵循的教程提供的Rspec:

require 'rails_helper'

describe Comment do
  include TestFactories

  describe "after_create" do

    before do
      @post = associated_post
      @user = authenticated_user
      @comment = Comment.new(body: "My comment", post: @post, user_id: 10000)
    end

    context "with user's permission" do

      it "send an email to users who have favorited the post" do
        @user.favorites.where(post: @post).create

        allow( FavoriteMailer )
          .to receive(:new_comment)
          .with(@user, @post, @comment)
          .and_return( double(deliver: true) )

        @comment.save
      end

      it "does not send emails to users who haven't" do
        expect ( FavoriteMailer )
          .not_to receive(:new_comment)

        @comment.save
      end
    end

    context "without permission" do
      before { @user.update_attribute(:email_favorites, false) }

      it "does not send emails, even to users who have favorited" do
        @user.favorites.where(post: @post).create

        expect ( FavoriteMailer )
          .not_to receive(:new_comment)

        @comment.save
      end
    end

  end
end

And here is the error: 这是错误:

Failures:

  1) Comment after_create with user's permission does not send emails to users who haven't
     Failure/Error: expect ( FavoriteMailer )
     NoMethodError:
       undefined method `not_to' for FavoriteMailer:Class
     # /home/vagrant/.rvm/gems/ruby-2.0.0-p576/gems/actionmailer-4.0.10/lib/action_mailer/base.rb:482:in `method_missing'
     # ./spec/models/comment_spec.rb:28:in `block (4 levels) in <top (required)>'

  2) Comment after_create without permission does not send emails, even to users who have favorited
     Failure/Error: expect ( FavoriteMailer )
     NoMethodError:
       undefined method `not_to' for FavoriteMailer:Class
     # /home/vagrant/.rvm/gems/ruby-2.0.0-p576/gems/actionmailer-4.0.10/lib/action_mailer/base.rb:482:in `method_missing'
     # ./spec/models/comment_spec.rb:41:in `block (4 levels) in <top (required)>'

Finished in 4.66 seconds (files took 24.42 seconds to load)
3 examples, 2 failures

Failed examples:

rspec ./spec/models/comment_spec.rb:27 # Comment after_create with user's permission does not send emails to users who haven't
rspec ./spec/models/comment_spec.rb:38 # Comment after_create without permission does not send emails, even to users who have favorited

I suspect the code on these lines is being interpreted in a different order to what's intended: 我怀疑这些行上的代码是以与预期不同的顺序解释的:

expect ( FavoriteMailer )
      .not_to receive(:new_comment)

Try this: 尝试这个:

expect( FavoriteMailer ).not_to receive(:new_comment)

The main thing to note is it's a good convention in Ruby to not leave a space between a method call and the opening bracket for the arguments (even though this can often work, it's best avoided to stop head-scratchers like this cropping up). 需要注意的主要一点是,在Ruby中的一个好习惯是在方法调用和参数的左括号之间不留空格(即使这通常可以奏效,但最好避免停止这样的麻烦)。

In this example, that means remove the space between expect and ( FavoriteMailer ) . 在此示例中,这意味着删除expect( FavoriteMailer )之间的空间。

Isn't the correct method to_not instead of not_to? 不是正确的方法to_not而不是not_to吗?

update Changed to_not and not_to other way around. 更新更改为to_not和not_to。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Rails-RSpec NoMethodError:未定义的方法 - Rails - RSpec NoMethodError: undefined method NoMethodError未定义方法&#39;-@&#39;在Controller Ruby on Rails中的NoMethodError - NoMethodError undefined method '-@' NoMethodError in Controller Ruby on Rails RSpec Rails NoMethodError:用户的未定义方法“ password =” - RSpec Rails NoMethodError: undefined method `password=' for User NoMethodError,我的控制器Ruby on Rails中的未定义方法 - NoMethodError, undefined method in my controller Ruby on Rails Ruby on Rails NoMethodError:nil:NilClass的未定义方法“ []” - Ruby on Rails NoMethodError: undefined method `[]' for nil:NilClass Ruby on Rails模型中的'NoMethodError:undefined method' - 'NoMethodError: undefined method' in Ruby on Rails Model Ruby on Rails NoMethodError“未定义的方法&#39;translates&#39;” - Ruby on Rails NoMethodError “undefined method `translates'” nil:NilClass Ruby on Rails的未定义方法&#39;&gt;&#39;(NoMethodError) - undefined method `>' for nil:NilClass Ruby on Rails (NoMethodError) nil 的未定义方法“%”:NilClass (NoMethodError) Ruby on Rails - Undefined method `%' for nil:NilClass (NoMethodError) Ruby on Rails Ruby On Rails - NoMethodError:nil:NilClass 的未定义方法“[]” - Ruby On Rails - NoMethodError: undefined method `[]' for nil:NilClass
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM