我的任务是为另一个团队编写的AngularJS代码编写单元测试,该团队没有编写任何测试
他们已经编写了以下函数,但我不知道如何测试它
function showCallAlerts(callRecord, isInEditMode, callBack) {
var callAlerts = populateCallAlertOnEditCall(callRecord.callAlert);
var callModalInstance = openAlertModalInstance('Call', callAlerts, callBack);
if (callModalInstance !== undefined && callModalInstance !== null) {
callModalInstance.result.then(function() {
// Show equipment alerts based on company details
showEquipmentAlertsBasedOnCompanyDetails(callRecord, isInEditMode, callBack);
});
} else {
// Show equipment alerts based on company details
showEquipmentAlertsBasedOnCompanyDetails(callRecord, isInEditMode, callBack);
}
}
我需要测试每个函数是否被调用,而不是担心它们做什么,因为我将分别测试它们,只是它们被调用。
调用populateCallAlertOnEditCall时,需要返回空数组或其中包含某些项的数组
调用openAlertModalInstance时,它需要返回未定义的或传递到showEquipmentAlertsBasedOnCompanyDetails的内容
showEquipmentAlertsBasedOnCompanyDetails实际上应该被调用,我将单独测试该方法,只是它被调用了
我已经设法写了一些代码来测试简单的函数,但没有一个像这样的,所以任何帮助都将非常感激,我花了今天下午的大部分时间试图弄清楚
你想要的那种行为叫做嘲弄
在《茉莉花》中,嘲笑是通过间谍对象完成的,你可以在这里读到更多关于它们的信息
基本上,您可以使用模拟来测试函数是否用预期的参数调用。
var xhr = mock( XMLHttpRequest );
xhr.send();
expect( xhr.send ).toHaveBeenCalled();
在测试某个东西是否被调用时,可以使用Spy
您的断言如下所示:
spyOn(obj, 'populateCallAlertOnEditCall')
expect(obj.method).toHaveBeenCalled()
更新:
populateCallAlertOnEditCall = {}
spyOn(obj, 'populateCallAlertOnEditCall.result')
expect(obj.method).toHaveBeenCalled()
您可以使用jasmine来模拟您对测试不感兴趣的函数调用。例如,您可以告诉jasmine在每次调用“populateCallAlertOnEditCall”时返回一个空数组。我将写一个例子,也许能给你一些启示:
describe('My Test Spec', function() {
var myController;
...
beforeEach( inject(($controller) => {
myController = $controller("myControllerName");
}));
it('Testing showCallAlerts when populateCallAlertOnEditCall returns an empty array', inject(function($controller) {
//setup
//this will replace every call to populateCallAlertOnEditCall with
//the function inside callFake
spyOn(myController, 'populateCallAlertOnEditCall ').and.callFake(function() {
return []; //returning an empty array.
});
//action
myController.showCallAlerts(...);
//assert
//Do your checking here.
}));
it('Testing showCallAlerts when populateCallAlertOnEditCall returns a non-empty array', inject(function($controller) {
//setup
//this will replace every call to populateCallAlertOnEditCall with
//the function inside callFake
spyOn(myController, 'populateCallAlertOnEditCall ').and.callFake(function() {
return [1,2,3,4]; //returning a non-empty array.
});
//action
myController.showCallAlerts(...);
//assert
//Do your checking here.
}));
});
我使用这本优秀的书(Python中的测试驱动开发)发现了Python上的TDD,到目前为止,我很喜欢它。 但是,我有一个关于创建单元测试的方式的问题。 让我们想象一下这样的事情: 如果我想测试A,它会非常简单:我将在我的单元测试中手动创建一个对象,并测试它,类似于这样: 但是,如何测试B?我可以看到这样的方式: 手动创建modified_MyObject并用它来测试B 在testB()中使用A()
我正在测试路由器,有两个函数,我需要测试第一个函数是否被调用,第二个函数是否被调用。有方法
所以我肯定有类似的东西在那里,但我已经搜索了一个小时,还没有找到确切的我要找的东西。假设我有一个这样的类: 我该如何制作这样的作品?
实际上,它的测试如果eat方法对宠物有效,但我也需要检查feedPet方法对玩家也有效。 任何想法或建议都非常感谢。
假设我有两个html文件具有如下功能: 我想从a.html直接指向B.html,然后直接调用函数B。我怎样才能做到?。因为我想要将JSON字符串从函数A传递到函数B,而不是使用window.onload()或$(document).ready()。 我将我的JSON字符串存储到本地存储,并将用户引导到b.html。然后函数B将读取本地存储并直接处理数据。
问题内容: 我正在使用 “ go test -v ”运行一堆单元测试。我想用delve调试它们。当我尝试运行调试器时,出现 “无法调试非主程序包” 错误。因此,如何使用delve调试器调试单元测试? 问题答案: 用途: 您还可以通过选择要运行的测试(就像)。 在内部,这与Flimzy的答案相同(它使用编译测试二进制文件),但更加精简,不会留下.test文件供您清理。