具有相对路径的jsdom和脚本标记

时间:2013-03-24 22:36:25

标签: javascript mocha jsdom chai

我在这里有一些单页演示:http://notjs.org/examples/forms/formmode_demo.html

我想,哇,如果可以在我现有的mocha chai badness设置中编写一些测试来直接测试这些示例,那将是非常棒的:

        example = 'forms/formmode_demo.html'

        describe "examples/#{example}", () ->
          before (done) ->
            loadExample example, () => done()

          it 'should load in full input mode', () ->
            window.$('input').length.should.equal 2

          describe "in full input mode", () ->
            it 'should have visible save', () ->
              window.$('button.success').is(':visible').should.be.true
            it 'should have visible cancel', () ->
              window.$('button.cancel').is(':visible').should.be.true
            it 'should not have put inputs on readonly class elements', ()->
              window.$('.readonly input').length.should.equal 0
            it 'should have input with author name', () ->
              window.$("[data-not_attr='name'] input:text").val().should.equal window.dataObject.name

如果我能做到这一点,那么我永远不会遭受这种尴尬,“你的例子x几个月前停止工作”的那一刻。

我得到了它的工作,但只有src的页面中的脚本标签来自http:// urls。如果我必须在测试之前将软件包部署到服务器,那么测试效果并不高。

示例页面加载jquery,下划线和notjs以及需要以便作为独立演示运行。它还应该能够从本地文件系统运行,并且可以使用相对URL。我最初在页面上的notjs脚本标记指向相对路径,例如

    <script src="../../notjs.basics.js"></script>

而不是

    <script src="http://notjs.org/notjs.basics.js"></script>

但是后来notjs.basics.js永远不会被加载(window.Notjs ==在测试中未定义),我没有看到来自jsdom的任何错误。我已经尝试过设置documentRoot jsdom选项,但这似乎不起作用。

作为参考,loadExample方法和我的jsdom设置的其余部分在这里:https://github.com/bee-hub/notjs/blob/master/test/testHelper.coffee

感谢您的任何帮助和建议。

1 个答案:

答案 0 :(得分:1)

我没有记录在任何地方,但jsdom版本0.8.4中的test / jsdom / index.js中的testLocal()函数为jsdom.jsdom(...)提供了一个“url”选项实现与documentRoot选项相同的目标。使用它,我能够从本地文件系统上的HTML文档中解析相关的脚本源路径。

对于它的价值,文档中也没有提到“documentRoot”。它的用途是anecdotally endorsed in a github issue,所以也许它可以在早期版本中使用。

不要忘记jsdom.jsdom(...)将异步加载脚本,因此请务必将测试与文档就绪事件联系起来。

祝你好运!