Giter Club home page Giter Club logo

Comments (4)

Antronin avatar Antronin commented on July 17, 2024 1

For the validation you have to mock out :picture too and it should return something not Nil.

before(:each) do
  <Model>.any_instance.stub(:avatar).and_return('png')
end

from attachinary.

assembler avatar assembler commented on July 17, 2024

There is no need to test that the file is actually uploaded (since the attachinary library is already well tested). You just need to make sure that the rest of your form is working properly. If the file upload is mandatory, then you should stub out the file upload process on the server (e.g. User.stub(:avatar=)). However, if you're using selenium (or other js driver) to test this up, then you would need some more advanced setup (e.g. something like this http://robots.thoughtbot.com/post/34761570235/using-capybara-to-test-javascript-that-makes-http).

If you really need to upload images to cloudinary as part of your test process, you can as well delete them all at the end of test suite. Just put this inside RSpec.configure block within your spec_helper file:

  config.after(:suite) do
    print "\n\n Cleaning up uploaded files"

    begin
      Cloudinary::Api.delete_resources_by_tag('test_env')
      print " (done)"
    rescue Cloudinary::Api::RateLimited => e
      print " (#{e.message})"
    end

    print "\n\n"
  end

from attachinary.

exocode avatar exocode commented on July 17, 2024

I like your suggestion about subbing and not uploading the image again and again!

I've read now some posts about stubbing. And tried to "stub" the avatar. But wont work.
What should the stub return? A simple "true"? or an "fabricated" object?

I've tried stubbing in the before(:each) with

User.stub(:image=).and_return(true).

and both of them
User.any_instance.stub(:image=)
User.any_instance.stub(:image=).and_return(true)

Normally I become

 Failure/Error: user = User.create! valid_attributes
 Mongoid::Errors::Validations:

   Problem:
     Validation of User failed.
   Summary:
     The following errors were found: Image can't be blank, Image can't be blank, Image can't be blank
   Resolution:
     Try persisting the document with valid data or remove the validations.

My Model contains an validate_presence_of on the attachinary :avatar.

Mongoid::Errors::Validations:

   Problem:
     Validation of User failed.
   Summary:
     The following errors were found: Image can't be blank, Image can't be blank, Image can't be blank
   Resolution:
     Try persisting the document with valid data or remove the validations.

also tried to deliver a hash with parameter:

    User.any_instance.stub(:image).and_return({_id: "12345676543ds234542",
                                             public_id: "jgj3mib2mwxnvduujdt2",
                                             version: "1352472513",
                                             width: 1311,
                                             height: 1836,
                                             format: "jpg",
                                             resource_type: "image",
                                             updated_at: 1352472546694,
                                             created_at: 1352472546694})
  end

The error I normally get with the stub above:

11) UsersController POST create with invalid params assigns a newly created but unsaved user as @user
   Failure/Error: post :create, {:user => {}}
   NoMethodError:
     undefined method `callback_executable?' for #<Hash:0x007fcf9cce1f30>

Sorry for reponening that question. But it is taking me down the rabbit hole...

Thank you assembler

from attachinary.

exocode avatar exocode commented on July 17, 2024

with excluding the validation it works. But is this the right approach to test controllers?

before(:each) do
  Slider.any_instance.stub(:valid?).and_return(true)
end

from attachinary.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.