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

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

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

所以我很困惑使用哪个:-)

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

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

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

所以我现在要使用汽油发动机,但我真的希望看到一些由谷歌合并的官方测试框架 . 特别是我想找到一些方法让这些脚本以某种频率运行,以便向我发送结果 . 我也很想得到一些BDD;看到我的其他帖子:

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

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

回答(5)

2 years ago

你可以试试QUnit for Google Apps Script . 这是patch for 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);
  });
}

然后授权脚本,保存脚本版本,发布脚本项目("Deploy as web app")并使用浏览器转到测试URL("latest code") . 您的测试将运行,结果将通过HtmlService显示 . 你可以单击它们来查看它们的断言,但是在写这篇文章时,由于Caja issue 1688,你可能无法在Firefox 20和21中这样做 .

2 years ago

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

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

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

var gastLibUrl = 'https://raw.githubusercontent.com/zixia/gast/master/src/gas-tap-lib.js'
eval(UrlFetchApp.fetch(gastLibUrl).getContentText())

var test = GasTap.setPrintDriver('Logger') 

function gast() {

  test('do calculation right', function (t) {    
    var i = 3 + 4
    t.equal(i, 7, 'I can calc 3 + 4 = 7')
  })

  test('Spreadsheet exist', function (t) {
    var ss = SpreadsheetApp.openById('1TBJpvlW3WWney4rk1yW5N9bAP8dOMkWxI97dOtco-fc')
    t.ok(ss, 'I can open spreadsheet')
  })

  test.finish()
}

希望有人会喜欢它 . :)

有一个在线版本,您可以在这里查看: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 years ago

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

来自clasp repo

Edit node-google-apps-script 项目已被弃用,赞成 clasp

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

  • npm install -g node-google-apps-script .

  • 浏览authorization steps以提供客户机密,以允许上载和导入Apps脚本项目 .

  • 使用 gulpgrunt 或您用于测试运行普通JavaScript项目的任何内容 .

有一个official Google sample可用,使用此工作流程 .

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

2 years ago

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

我一直在使用它来进行一些电子表格操作,我一直在做合理的成功 . 我也一直在使用Jasmine进行非GAS客户端js工作,并且非常喜欢它 . 我怀念燃气单元能够轻松创建 Spy ,我赞成BDD规范写作风格 .

gas-unit对我来说是一个很好的学习练习,它确实有效,虽然可能有未被发现的范围和闭包问题 - 这是我在DOM操作之外的第一个重要的js练习 .

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

2 years ago

另一个用于Google Scripts中单元测试的库是GSUnit .

项目密钥: MIUhnnCDES0N3YHPEWX9DUtkh30YExdAc

GSUnit是基于Google Apps脚本的测试框架,基于Kent Beck的JUnit和Edward Hieatt的JSUnit