jasmine-jquery loadFixtures with Jasmine 2.0 won't work

10,638

Solution 1

I want to thank travisjeffery for his answer. While it wasn't the resolution to my problem, it got me back to trying different things. The answer to the specific sample I posted was that I put the fixture in the folder with the spec, which was not the folder with the runner, and the path is defined relative to the runner. However, my problem with my real setup remained. Since I finally got a working sample, I went to work figuring out what I was doing wrong.

The main problem was my HTML Fixture, while valid in jasmine-jquery 1.5, was no longer valid in version 2.0.2. I thought I'd covered all the syntax possibilities earlier by removing pieces one at a time, but when I did it again, I found that removing my script section got the fixture loading. I put it back, but inside the html element, rather than after it. I figure this equated to two root elements in an XML document, thus BAM! Parse error.

One other issue is that I have to put the jasmine-jquery script in the runner after I load the boot.js file, otherwise I get "0 fixtures 0 failures". After that, I had to update Jasmine syntax, and now I have a working set of tests again. I hope this helps others.

Solution 2

i maintain jasmine-jquery.

jasmine and jasmine-jquery are fine here, the problem is that the ajax requests that load the fixture don't comply with your browser's security policies. there's a section in jasmine-jquery's README on this: https://github.com/velesin/jasmine-jquery/#cross-domain-policy-problems-under-chrome

Share:
10,638

Related videos on Youtube

VeteranCoder
Author by

VeteranCoder

I am a software architect with a Fortune 500 company with experience in .NET, Java, Linux, Windows and a bunch of other technologies.

Updated on June 04, 2022

Comments

  • VeteranCoder
    VeteranCoder about 2 years

    I've spent about a day debugging this, and I'm at a loss. It looks like something isn't working in jasmine-jquery 2.0.2.

    I'm updating from Jasmine 1.3.1 and jasmine-jquery 1.5 to the newest versions. I am getting various failures depending on how I attempt to load fixtures. I get " Fixture could not be loaded: ./ExposureWorksheetFixture.html (status: parsererror, message: Invalid XML" after I tweaked jasmine-jquery to supply parameters to the ajax.fail() method.

    Another effect I have, when I tweak the sample jasmine runner and tests is it says "zero fixtures, zero failures". This happens when I reference jasmine-jquery, jquery 1.10.2, and attempt to set fixtures. If I remove the operation (but leave the references) the sample works.

    Another error I get when I try to load fixtures is "(status: error, message: Access to restricted URI denied)". This seems to happen when it actually tries to load the file, which is in the assigned location. I saw another question that pointed to jquery requiring a real web server to load files, and it doesn't like local file paths, but I don't have this problem with the older versions of these libraries. This happens in Firefox. I get a TypeError: Object doesn't support this property or method in IE 8. In Firefox, I get Error: Fixture could not be loaded: spec/javascripts/fixtures/fixture.html (status: error, message: A network error occurred.).

    Here's some sample code...

    In PlayerSpec.js:

    jasmine.getFixtures().fixturesPath = "./";
    ...
    beforeEach(function() {
      player = new Player();
      song = new Song
    loadFixtures("fixture.html");
    });
    

    In SpecRunner.html, note the extra references to jquery and jasmine-jquery:

    <!DOCTYPE HTML>
    <html>
    <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <title>Jasmine Spec Runner v2.0.0</title>
    
      <link rel="shortcut icon" type="image/png" href="lib/jasmine-2.0.0/jasmine_favicon.png">
      <link rel="stylesheet" type="text/css" href="lib/jasmine-2.0.0/jasmine.css">
    
      <script type="text/javascript" src="lib/jasmine-2.0.0/jasmine.js"></script>
      <script type="text/javascript" src="lib/jasmine-2.0.0/jasmine-html.js"></script>
      <script type="text/javascript" src="lib/jasmine-2.0.0/boot.js"></script>
      <script type="text/javascript" src="lib/jquery-1.10.2.js"></script>
      <script type="text/javascript" src="lib/jasmine-jquery.js"></script>
    
      <!-- include source files here... -->
      <script type="text/javascript" src="src/Player.js"></script>
      <script type="text/javascript" src="src/Song.js"></script>
    
      <!-- include spec files here... -->
      <script type="text/javascript" src="spec/SpecHelper.js"></script>
      <script type="text/javascript" src="spec/PlayerSpec.js"></script>
    
    </head>
    
    <body>
    </body>
    </html>
    

    The output on the runner (first test - all tests fail)

    Jasmine2.0.0finished in 0.019s
    
    raise exceptions5 specs, 5 failuresSpec List | Failures
    Player should be able to play a Song
    Error: Fixture could not be loaded: spec/javascripts/fixtures/fixture.html (status: error, message: Access to restricted URI denied) in file:///D:/Temp/jas/lib/jasmine-jquery.js (line 132)
    jasmine.Fixtures.prototype.loadFixtureIntoCache_/request<@file:///D:/Temp/jas/lib/jasmine-jquery.js:132 jQuery.Callbacks/fire@file:///D:/Temp/jas/lib/jquery-1.10.2.js:3048 jQuery.Callbacks/self.add@file:///D:/Temp/jas/lib/jquery-1.10.2.js:3094 jasmine.Fixtures.prototype.loadFixtureIntoCache_@file:///D:/Temp/jas/lib/jasmine-jquery.js:131 jasmine.Fixtures.prototype.getFixtureHtml_@file:///D:/Temp/jas/lib/jasmine-jquery.js:115 jasmine.Fixtures.prototype.read@file:///D:/Temp/jas/lib/jasmine-jquery.js:77 jasmine.Fixtures.prototype.load@file:///D:/Temp/jas/lib/jasmine-jquery.js:65 jasmine.Fixtures.prototype.proxyCallTo_@file:///D:/Temp/jas/lib/jasmine-jquery.js:161 window.loadFixtures@file:///D:/Temp/jas/lib/jasmine-jquery.js:763 @file:///D:/Temp/jas/spec/PlayerSpec.js:9 attemptSync@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:1510 QueueRunner.prototype.run@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:1498 QueueRunner.prototype.execute@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:1485 Env/queueRunnerFactory@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:518 Spec.prototype.execute@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:309 Suite.prototype.execute/wrapChildAsAsync/<@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:1708 attemptAsync@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:1520 QueueRunner.prototype.run@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:1496 QueueRunner.prototype.execute@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:1485 Env/queueRunnerFactory@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:518 Suite.prototype.execute@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:1696 Suite.prototype.execute/wrapChildAsAsync/<@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:1708 attemptAsync@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:1520 QueueRunner.prototype.run@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:1496 QueueRunner.prototype.execute@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:1485 Env/queueRunnerFactory@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:518 Suite.prototype.execute@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:1696 @file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:541 attemptAsync@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:1520 QueueRunner.prototype.run@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:1496 QueueRunner.prototype.execute@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:1485 Env/queueRunnerFactory@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:518 @file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:548 window.onload@file:///D:/Temp/jas/lib/jasmine-2.0.0/boot.js:170 
    

    Edit 2/13/14 @ 8:32pm est: I just tried updating only jasmine-jquery, and everything fails spectacularly when I do that (Jasmine 1.31). I'm thinking there must be something going on with this library :(

  • VeteranCoder
    VeteranCoder over 10 years
    I'll give it a try, for Chrome, but I have errors on IE8 and Firefox 27, too, per the errors above. I'm hoping I'm doing something wrong and you can help me see it. I can supply more detail if you need it.
  • VeteranCoder
    VeteranCoder over 10 years
    I just ran it in chrome (after verifying the fixture location setting) with the option set and I get Error: Fixture could not be loaded: ./fixture.html (status: error, message: A network error occurred.)
  • VeteranCoder
    VeteranCoder over 10 years
    I think I got it. I had the fixture in the same folder as the spec, but the path is relative to the runner. I got this scenario to work, so now I need to get back to my more complicated real-world project that's failing. Thanks for the help. I'll update with a confirmed answer once I figure out my upgrade.