如何单元测试谷歌应用程序脚本?

时间:2013-03-28 12:53:19

标签: unit-testing google-apps-script

我正在尝试设置谷歌应用脚​​本的单元测试,我发现了两个项目:

https://code.google.com/p/gas-unit/ https://code.google.com/p/gasunit/

所以我很困惑使用它: - )

我刚接触了unhyphenated gasunit,似乎期望脚本嵌入在电子表格中,我对如何做有点不清楚......我想要测试的脚本是基于Web的脚本而不是电子表格

我有更多的运气测试连字符气体单元,它设法向我发送测试的电子邮件输出并在我的谷歌网站生成结果页面:

https://sites.google.com/site/testappscript2/TestResults

所以我现在打算使用燃气单元,但我真的很想看到Google合并的一些官方测试框架。特别是我想找到一些方法让这些脚本以某种频率运行,以便向我发送结果。我也很想得到一些BDD;看到我的其他帖子:

How to get Cucumber/Capybara/Mechanize to work against external non-rails site how to use capybara has_text

来吧谷歌,你所有的浴室都有“测试岩石,调试糟透了”吗?如何更好地测试对Google Apps脚本的支持?

6 个答案:

答案 0 :(得分:15)

您可以尝试QUnit for Google Apps Scriptpatch QUnit变成了API docs的Google Apps脚本库。

您需要的只是一个脚本项目,它导入一个QUnit库(例如带有项目键MxL38OxqIK-B73jyDTvCe-OBao7QLBR4j的库)并具有一个doGet函数,该函数使用URL参数配置QUnit,也可以选择使用您自己的设置,加载一个运行测试的函数,最后返回QUnit.getHtml()。这是一个例子:

function doGet( e ) {
  QUnit.urlParams( e.parameter );
  QUnit.config({ title: "Unit tests for my project" });
  QUnit.load( myTests );
  return QUnit.getHtml();
};

// Imports the following functions:
// ok, equal, notEqual, deepEqual, notDeepEqual, strictEqual,
// notStrictEqual, throws, module, test, asyncTest, expect
QUnit.helpers(this);

function myTests() {
  module("dummy module");

  test("dummy test", 1, function() {
    ok(true);
  });
}

然后授权脚本,保存脚本版本,发布脚本项目(“部署为Web应用程序”)并使用浏览器转到测试URL(“最新代码”)。您的测试将运行,结果将通过HtmlService显示。您可以单击它们来查看它们的断言,但在撰写本文时,由于Caja issue 1688,您可能无法在Firefox 20和21中执行此操作。

答案 1 :(得分:7)

我刚为我的谷歌电子表格插件开发和编写了另一个名为GasT的测试框架。测试

GasT是适用于Google Apps脚本的符合TAP标准的测试框架。它提供了一种简单的方法来验证您编写的GAS程序是否按预期运行。 https://github.com/zixia/gast

我的目标是获得一个简单的点击工具,如磁带(用于javascript)或蝙蝠(用于bash)。测试套件格式非常清楚:

import argparse
from num2words import num2words

def play():
    parser = argparse.ArgumentParser()
    parser.add_argument("--b", default=100,type=int,help="b")
    args = parser.parse_args() 
    for file in reversed(range(file)):
        print(num2words(iteration) + " there are")
        print(num2words(iteration) + " there are")

if __name__ == '__main__':
    play()

希望有人会喜欢它。 :)

有一个在线版本,您可以在这里查看:https://docs.google.com/spreadsheets/d/19M2DY3hunU6tDQFX5buJmZ_f3E8VFmlqAtodyC-J8Ag/edit#gid=0&vpid=A1

GasT - Google Apps Script Testing-framework, Test Anything Protocol compatible

答案 2 :(得分:4)

clasp tool提供了从命令行在本地开发和部署Apps脚本项目的功能。

来自clasp repo

  1. npm install -g @google/clasp
  2. 启用Apps脚本API:https://script.google.com/home/usersettings
  3. 在本地开发并使用clasp工具进行部署。
  4. 修改已弃用node-google-apps-script项目,转而使用clasp

    允许使用node-google-apps-script包来使用标准JavaScript包和自动化测试工具。

    1. npm install -g node-google-apps-script
    2. 浏览authorization steps以提供客户机密,以允许上传和导入Apps脚本项目。
    3. 使用gulpgrunt或您用于测试正常JavaScript项目的任何内容。
    4. official Google sample可用,使用此工作流程。

      有关详细信息,请参阅Google Apps Developer Blog post announcement

      下载文件后,将其重命名为TypeScript,然后将其重命名为.ts而不是.js。一旦它们是TypeScript,ava就可以用来测试它们。将它们转换为TypeScript也可以使用ES6语言功能。

答案 3 :(得分:3)

我创建了gas-unit(https://code.google.com/p/gas-unit/)并且在过去的几天里花了一些时间来整理示例并添加一个HTML测试运行器。

我自己一直在使用它进行一些电子表格操作,我一直在做合理的成功。我也一直在使用Jasmine进行非GAS客户端js的工作,并且非常喜欢它。我怀念气体装置能够轻松创建间谍,我赞成BDD规范写作风格。

对于我来说,气体单元一直是一个很好的学习练习,它确实有效,尽管可能存在未被发现的范围和闭包问题 - 这是我在DOM操作之外的第一个重要的js练习。

我认为在GAS中进行测试的未来必须是QUnit(如Adam建议)或Jasmine的端口。我快速了解了移植Jasmine需要什么,但是还没有找到时间来解决它。

答案 4 :(得分:1)

另一个在Google脚本中进行单元测试的库是GSUnit

项目密钥: MIUhnnCDES0N3YHPEWX9DUtkh30YExdAc

  

GSUnit是基于JUnit的基于Google Apps脚本的测试框架   肯特·贝克(Kent Beck)和爱德华·希亚特(Edward Hieatt)的JSUnit

答案 5 :(得分:1)

签出QUnitGS2-使用最新版本的QUnit(v2.10.1)的新Apps脚本库。