RSpec for email format validation failed












0














I've got user devise model with validations



class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable

validates :first_name, presence: true, length: { maximum: 100 }
validates :last_name, presence: true, length: { maximum: 100 }
validates :email, presence: true, uniqueness: true, format: { with: /A.+@.+..+z/ }
end


and RSpec file to test email validation



describe 'email field' do
subject { User.new(first_name: 'jan', last_name: 'kowalski', email: 'jan@foo.com').valid? }

context 'when email has wrong format' do
let(:email) { 'jan@foo' }

it 'complains for invalid format' do
is_expected.to eq false
end

let(:email) { 'jan' }

it 'complains for invalid format' do
is_expected.to eq false
end
end

context 'when email has correct format' do

it 'accepts valid format' do
is_expected.to eq true
end
end
end


I want to test the validations for correct email address format which is in user model. Every test passed well except the last where I have an error expected: true got: false. Did I miss something in a spec file? or maybe I have wrong declaration in user model? Any helps are welcomed.










share|improve this question



























    0














    I've got user devise model with validations



    class User < ApplicationRecord
    # Include default devise modules. Others available are:
    # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
    devise :database_authenticatable, :registerable,
    :recoverable, :rememberable, :validatable

    validates :first_name, presence: true, length: { maximum: 100 }
    validates :last_name, presence: true, length: { maximum: 100 }
    validates :email, presence: true, uniqueness: true, format: { with: /A.+@.+..+z/ }
    end


    and RSpec file to test email validation



    describe 'email field' do
    subject { User.new(first_name: 'jan', last_name: 'kowalski', email: 'jan@foo.com').valid? }

    context 'when email has wrong format' do
    let(:email) { 'jan@foo' }

    it 'complains for invalid format' do
    is_expected.to eq false
    end

    let(:email) { 'jan' }

    it 'complains for invalid format' do
    is_expected.to eq false
    end
    end

    context 'when email has correct format' do

    it 'accepts valid format' do
    is_expected.to eq true
    end
    end
    end


    I want to test the validations for correct email address format which is in user model. Every test passed well except the last where I have an error expected: true got: false. Did I miss something in a spec file? or maybe I have wrong declaration in user model? Any helps are welcomed.










    share|improve this question

























      0












      0








      0







      I've got user devise model with validations



      class User < ApplicationRecord
      # Include default devise modules. Others available are:
      # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
      devise :database_authenticatable, :registerable,
      :recoverable, :rememberable, :validatable

      validates :first_name, presence: true, length: { maximum: 100 }
      validates :last_name, presence: true, length: { maximum: 100 }
      validates :email, presence: true, uniqueness: true, format: { with: /A.+@.+..+z/ }
      end


      and RSpec file to test email validation



      describe 'email field' do
      subject { User.new(first_name: 'jan', last_name: 'kowalski', email: 'jan@foo.com').valid? }

      context 'when email has wrong format' do
      let(:email) { 'jan@foo' }

      it 'complains for invalid format' do
      is_expected.to eq false
      end

      let(:email) { 'jan' }

      it 'complains for invalid format' do
      is_expected.to eq false
      end
      end

      context 'when email has correct format' do

      it 'accepts valid format' do
      is_expected.to eq true
      end
      end
      end


      I want to test the validations for correct email address format which is in user model. Every test passed well except the last where I have an error expected: true got: false. Did I miss something in a spec file? or maybe I have wrong declaration in user model? Any helps are welcomed.










      share|improve this question













      I've got user devise model with validations



      class User < ApplicationRecord
      # Include default devise modules. Others available are:
      # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
      devise :database_authenticatable, :registerable,
      :recoverable, :rememberable, :validatable

      validates :first_name, presence: true, length: { maximum: 100 }
      validates :last_name, presence: true, length: { maximum: 100 }
      validates :email, presence: true, uniqueness: true, format: { with: /A.+@.+..+z/ }
      end


      and RSpec file to test email validation



      describe 'email field' do
      subject { User.new(first_name: 'jan', last_name: 'kowalski', email: 'jan@foo.com').valid? }

      context 'when email has wrong format' do
      let(:email) { 'jan@foo' }

      it 'complains for invalid format' do
      is_expected.to eq false
      end

      let(:email) { 'jan' }

      it 'complains for invalid format' do
      is_expected.to eq false
      end
      end

      context 'when email has correct format' do

      it 'accepts valid format' do
      is_expected.to eq true
      end
      end
      end


      I want to test the validations for correct email address format which is in user model. Every test passed well except the last where I have an error expected: true got: false. Did I miss something in a spec file? or maybe I have wrong declaration in user model? Any helps are welcomed.







      ruby-on-rails rspec






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 22 at 18:09









      wichru

      346




      346
























          1 Answer
          1






          active

          oldest

          votes


















          1














          you have some mistakes in your spec file, the two let of email are not execution in anyway.



          if you want that behavior you need to replace the email option in your subject by a variable, and your second it you need to wrap it in a context and put inside you let(:email), this is the way that rspec is going to replace the value of your subject in each it.



          Here an example but using a password variable, also your two first test are passing, because your are missing the password that way your expec is false, but they are not test the test your are describing.



          describe 'password field' do
          subject { Usuario.new(nombre: 'jan', username: 'kowalski', password: password).valid? }

          context 'when password has wrong format' do
          let(:password) { nil }
          it 'complains for invalid format' do
          is_expected.to eq false
          end
          end

          context 'when password size is incorrect' do
          let(:password) { 'jan' }
          it 'complains for invalid format' do
          is_expected.to eq false
          end
          end

          context 'when password has correct format' do
          let(:password) { '1qaz2wsx' }
          it 'accepts valid format' do
          is_expected.to eq true
          end
          end
          end





          share|improve this answer





















          • Your example showed me that I forgot to add password which is required in devise model either. Of course the solution was also to replace the email option by a variable.
            – wichru
            Nov 22 at 21:18











          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53436282%2frspec-for-email-format-validation-failed%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          1














          you have some mistakes in your spec file, the two let of email are not execution in anyway.



          if you want that behavior you need to replace the email option in your subject by a variable, and your second it you need to wrap it in a context and put inside you let(:email), this is the way that rspec is going to replace the value of your subject in each it.



          Here an example but using a password variable, also your two first test are passing, because your are missing the password that way your expec is false, but they are not test the test your are describing.



          describe 'password field' do
          subject { Usuario.new(nombre: 'jan', username: 'kowalski', password: password).valid? }

          context 'when password has wrong format' do
          let(:password) { nil }
          it 'complains for invalid format' do
          is_expected.to eq false
          end
          end

          context 'when password size is incorrect' do
          let(:password) { 'jan' }
          it 'complains for invalid format' do
          is_expected.to eq false
          end
          end

          context 'when password has correct format' do
          let(:password) { '1qaz2wsx' }
          it 'accepts valid format' do
          is_expected.to eq true
          end
          end
          end





          share|improve this answer





















          • Your example showed me that I forgot to add password which is required in devise model either. Of course the solution was also to replace the email option by a variable.
            – wichru
            Nov 22 at 21:18
















          1














          you have some mistakes in your spec file, the two let of email are not execution in anyway.



          if you want that behavior you need to replace the email option in your subject by a variable, and your second it you need to wrap it in a context and put inside you let(:email), this is the way that rspec is going to replace the value of your subject in each it.



          Here an example but using a password variable, also your two first test are passing, because your are missing the password that way your expec is false, but they are not test the test your are describing.



          describe 'password field' do
          subject { Usuario.new(nombre: 'jan', username: 'kowalski', password: password).valid? }

          context 'when password has wrong format' do
          let(:password) { nil }
          it 'complains for invalid format' do
          is_expected.to eq false
          end
          end

          context 'when password size is incorrect' do
          let(:password) { 'jan' }
          it 'complains for invalid format' do
          is_expected.to eq false
          end
          end

          context 'when password has correct format' do
          let(:password) { '1qaz2wsx' }
          it 'accepts valid format' do
          is_expected.to eq true
          end
          end
          end





          share|improve this answer





















          • Your example showed me that I forgot to add password which is required in devise model either. Of course the solution was also to replace the email option by a variable.
            – wichru
            Nov 22 at 21:18














          1












          1








          1






          you have some mistakes in your spec file, the two let of email are not execution in anyway.



          if you want that behavior you need to replace the email option in your subject by a variable, and your second it you need to wrap it in a context and put inside you let(:email), this is the way that rspec is going to replace the value of your subject in each it.



          Here an example but using a password variable, also your two first test are passing, because your are missing the password that way your expec is false, but they are not test the test your are describing.



          describe 'password field' do
          subject { Usuario.new(nombre: 'jan', username: 'kowalski', password: password).valid? }

          context 'when password has wrong format' do
          let(:password) { nil }
          it 'complains for invalid format' do
          is_expected.to eq false
          end
          end

          context 'when password size is incorrect' do
          let(:password) { 'jan' }
          it 'complains for invalid format' do
          is_expected.to eq false
          end
          end

          context 'when password has correct format' do
          let(:password) { '1qaz2wsx' }
          it 'accepts valid format' do
          is_expected.to eq true
          end
          end
          end





          share|improve this answer












          you have some mistakes in your spec file, the two let of email are not execution in anyway.



          if you want that behavior you need to replace the email option in your subject by a variable, and your second it you need to wrap it in a context and put inside you let(:email), this is the way that rspec is going to replace the value of your subject in each it.



          Here an example but using a password variable, also your two first test are passing, because your are missing the password that way your expec is false, but they are not test the test your are describing.



          describe 'password field' do
          subject { Usuario.new(nombre: 'jan', username: 'kowalski', password: password).valid? }

          context 'when password has wrong format' do
          let(:password) { nil }
          it 'complains for invalid format' do
          is_expected.to eq false
          end
          end

          context 'when password size is incorrect' do
          let(:password) { 'jan' }
          it 'complains for invalid format' do
          is_expected.to eq false
          end
          end

          context 'when password has correct format' do
          let(:password) { '1qaz2wsx' }
          it 'accepts valid format' do
          is_expected.to eq true
          end
          end
          end






          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Nov 22 at 19:30









          Luis Silva

          6113




          6113












          • Your example showed me that I forgot to add password which is required in devise model either. Of course the solution was also to replace the email option by a variable.
            – wichru
            Nov 22 at 21:18


















          • Your example showed me that I forgot to add password which is required in devise model either. Of course the solution was also to replace the email option by a variable.
            – wichru
            Nov 22 at 21:18
















          Your example showed me that I forgot to add password which is required in devise model either. Of course the solution was also to replace the email option by a variable.
          – wichru
          Nov 22 at 21:18




          Your example showed me that I forgot to add password which is required in devise model either. Of course the solution was also to replace the email option by a variable.
          – wichru
          Nov 22 at 21:18


















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.





          Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


          Please pay close attention to the following guidance:


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53436282%2frspec-for-email-format-validation-failed%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          What visual should I use to simply compare current year value vs last year in Power BI desktop

          How to ignore python UserWarning in pytest?

          Alexandru Averescu