Code Monkey home page Code Monkey logo

api_matchers's People

Contributors

ahmet avatar benlovell avatar evan-m avatar lucascaton avatar sorens avatar thadeubrito avatar tomas-stefano avatar wafcio avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

api_matchers's Issues

Improve expectation messages

The messages are all screw up:

expect(response.body).to have_json({})

Results in an strange error message:

Failure/Error: expect(response.body).to have_json({})
       expect to have json: '{"orders":[]}'. Got: '{"orders"=>[]}'.

The objective is to show the expected and the actual like this:

Failure/Error: expect(response.body).to have_json({})
       expect to have json: '{}'. Got: '{"orders"=>[]}'.

Formatting failures messages

When you dealing with API's that return an certain amout of data, it becames near to impossible to see the diff between the expected and the actual.

Exception is raised when call response without body method

ruby '2.1.2'
Rails: 4.0.8

When use the expect(response), expecting that the APIMatchers calls the 'body' method, the spec trows an exception.

Failure/Error: expect(response).to have_json({})
     TypeError:
       no implicit conversion of ActionController::TestResponse into String
     # /Users/tomas-stefano/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/json/common.rb:155:in `initialize'
     # /Users/tomas-stefano/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/json/common.rb:155:in `new'
     # /Users/tomas-stefano/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/json/common.rb:155:in `parse'
     # /Users/tomas-stefano/.rvm/gems/ruby-2.1.2@marketplace/gems/api_matchers-0.5.0/lib/api_matchers/core/parser.rb:5:in `json'
     # /Users/tomas-stefano/.rvm/gems/ruby-2.1.2@marketplace/gems/api_matchers-0.5.0/lib/api_matchers/response_body/have_json.rb:14:in `matches?'
     # /Users/tomas-stefano/.rvm/gems/ruby-2.1.2@marketplace/gems/rspec-expectations-2.14.5/lib/rspec/expectations/handler.rb:24:in `handle_matcher'
     # /Users/tomas-stefano/.rvm/gems/ruby-2.1.2@marketplace/gems/rspec-expectations-2.14.5/lib/rspec/expectations/expectation_target.rb:34:in `to'

incorrect usage of present? leads to problems with testing for boolean values

The problem is

if expected_value.present?

if expected_value is evaluated to a FalseClass, .present? will still return false

1.9.2p320 :001 > false.present?
 => false 
1.9.2p320 :002 > true.present?
 => true 
1.9.2p320 :003 > nil.present?
 => false 
1.9.2p320 :004 > false.nil?
 => false 
1.9.2p320 :005 > true.nil?
 => false 
1.9.2p320 :006 > nil.nil?
 => true 

instead, use.nil? to guard instead of .present?

Multiple nodes in an array

Hey there.

One thing I just ran into while testing an api that returns a collection of resources wrapped in an array.

Per your example, this works fine:

"{ \"transaction\": { \"id\": \"54\", \"status\": \"paid\" } }".should have_node(:id)
=> true

However, this, when wrapped in an array, does not:

"[{ \"transaction\": { \"id\": \"54\", \"status\": \"paid\" } }]".should have_node(:id)
RSpec::Expectations::ExpectationNotMetError: expected to have node called: 'id'. Got: '[{ "transaction": { "id": "54", "status": "paid" } }]'
from /Users/joel/.rvm/gems/ruby-1.9.2-p320/gems/rspec-expectations-2.11.3/lib/rspec/expectations/fail_with.rb:33:in `fail_with'

Should that be the expected result? I would have expected it to find :id anyway.

same node in multiple places

Given response listing multiple records:

<messages>
  <message><id>4</id></message>
  <message><id>2</id></message>
</message>

response.body.should have_xml_node(:id).with(2) will fail, even though it should not.

Readme examples failing

I tried some examples from the README and they fail for me. Gem Specs all pass against my Ruby and Rspec versions.

I simplified it to a 2 file test in a blank rvm gemset:

https://gist.github.com/3959775

Versions:
gem 'rspec', '2.11.0'
gem 'api_matchers', '0.1.1'
ruby 1.9.3p233 (2012-05-30 revision 35845) [x86_64-darwin11.4.0]

Failures:

  1) APIMatcher examples shouldn't fail
     Failure/Error: "{ 'transaction': { 'id': '54', 'status': 'paid' } }".should have_node(:transaction)
       expected to have node called: 'transaction'. Got: '{ 'transaction': { 'id': '54', 'status': 'paid' } }'
     # ./api_matchers_spec.rb:6:in `block (2 levels) in <top (required)>'

  2) APIMatcher examples also shouldn't fail
     Failure/Error: "{ 'transaction': { 'id': '54', 'status': 'paid' } }".should have_node(:id).with(54)
       expected to have node called: 'id' with value: '54'. Got: '{ 'transaction': { 'id': '54', 'status': 'paid' } }'
     # ./api_matchers_spec.rb:10:in `block (2 levels) in <top (required)>'

error in readme

You have body_method but it should be response_body_method in readme.

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.