与Laika和PhantomJS的集成测试

时间:2014-01-08 14:52:07

标签: testing meteor phantomjs laika

我刚开始使用Laika在我的Meteor应用上做一些TDD。虽然,我想做一些集成测试,因为单元测试对我来说没什么价值。

我可以通过Laika使用PhantomJS进行一些屏幕捕捉吗?例如。我想点击html链接并按类/ ID选择元素。

我在咖啡中进行了基本(单位)测试:

# tests/players_test.coffee

assert = require 'assert'

suite 'Players', ->
  test 'in the server', (done, server) ->
    server.eval ->
      Players.insert title: 'hello there'
      players = Players.find().fetch()
      emit('players', players)

    server.once 'players', (players) ->
      assert.equal 1, players.length
      done()

我想通过使用客户端(在测试功能中添加(done, server)旁边)将其转换为集成测试,然后手动选择标签并点击链接,填写姓名等,点击例如'注册',然后检查是否在数据库中找到该用户。

谢谢!

1 个答案:

答案 0 :(得分:1)

是的,你可以这样做。

suite 'Players', ->
  test 'in the server', (done, server, client) ->
    client.eval ->
      // get access to a DOM element (can optionally use jQuery instead)
      player = document.querySelector("[data-test='player']")
      // now we can call functions on the element
      player.value = "Joe blogs"
      player.click()
      // if you know the element won't exist in the DOM yet use waitForDOM
      waitForDOM "[data-test='something-else']", ->
         // perform some logic now that the element exists in the DOM
      emit('players', players)

    server.once 'players', (players) ->
      assert.equal 1, players.length
      done()

您可能还想在此处查看evalSync:http://arunoda.github.io/laika/syntax-sugar.html

这使您可以以同步方式编写测试。它仍然是异步执行的,但这意味着你不必围绕'eval'测试所具有的所有不同的命名触发器/订阅。以下是evalSync ...

的基础知识
suite 'evalSync', ->
    test 'evalSync for the win', (done, server, client) ->
        client.evalSync ->
            // perform some logic on the client
            emit("return")

        server.evalSync ->
            // perform some logic on the server
            emit("return")

        done() // notice this is outside the 'evalSync'

作为旁注,我建议在元素(或其他一些自定义数据属性)上使用“data-test”属性。如果你在测试中按类或id选择然后重构你的CSS / HTML,你将不得不寻找你的CSS正在使用哪些类/ id以及你的测试正在使用哪些类/ id。使用“数据测试”让你清楚。

相关问题